Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie könnt es gehen?? asp.net wie Access-Unterformular
Tott666
myCSharp.de - Member

Avatar #avatar-1959.jpg


Dabei seit:
Beiträge: 186
Herkunft: Mönchengladbach

Themenstarter:

Wie könnt es gehen?? asp.net wie Access-Unterformular

beantworten | zitieren | melden

Hallo zusammen,

ich möchte folgendes machen:

Eine Suchseite, die dann zeilweise mein ergebnis anzeigt, jedoch nicht mit einem Datagrid, da ich gerne einen anderen Aufbau haben möchte:

Links großes Bild (über mehrere Zeilen)
rechts danaben verschiedene Text/Labelfelder mit angaben
rechts davon wiederum einen Button mit Link auf Detail-Seite
So in der Art wie die angehängte datei.

Die Suche zu machen ist nicht das Thema, auch nicht dort einen SQLReader oder Dataset raus zu bekommen, nur wie bekomme ich die jeweilige anzeige hin.

Ich dachte an eine ascx-Datei, nur wie kann ich diese wiederrum mit der Hauptform verknüpfen, so das dort der Datensatz xy aufgerufen wird und beim nächsten mal der Datnsatz yz.



Ich hoffe ihr versteht was ich möchte und könnt mir helfen, im moment steh ich total auf der Leitung

Greets Tott

PS:
Programiere asp.net in vb
Attachments
Ich weiß, dass ich nichts weiß 8)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hallo,
falls Du das meinst:
In der Hauptseite
<%@ Reference Control="path/to/myControl.ascx" %>


EDIT: Hatte die "%" vergessen
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Tott666
myCSharp.de - Member

Avatar #avatar-1959.jpg


Dabei seit:
Beiträge: 186
Herkunft: Mönchengladbach

Themenstarter:

beantworten | zitieren | melden

Ja,
soweit ist das klar, aber wie bekomme ich das x-mal geladen, für je einen Datensatz und wie gekomme ich die verknüpfung hin zu dem anzuzeigenden Datensatz???
Ich weiß, dass ich nichts weiß 8)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Indem du x Tags dafür erstellst, jedes davon wird ein Item der Controls der Hauptseite, und du hast sogar für jedes einen Member in der Page, heißt wie die ID des Tags.

EDIT:
Jede Control hat dann wieder eine Controls-Collection, da müsstest Du dann auch den Button finden.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Tott666
myCSharp.de - Member

Avatar #avatar-1959.jpg


Dabei seit:
Beiträge: 186
Herkunft: Mönchengladbach

Themenstarter:

beantworten | zitieren | melden

Entweder hab ich dich nicht richtig verstanden, oder wir reden aneinander vorbei.

Meines wissens nach kann man keine Objekte zur laufzeit erstellen unter asp.net und ich habe auch noch nicht die Datenbindung bei der ascx-Datei zu dem jeweiligen Datensatz mit der ID 4711.


Hast du evtl. eine Seite wo man sich das ganze mal als beispiel ansehen kann, so wie du es meinst??
Ich weiß, dass ich nichts weiß 8)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Du kannstdie Tags ja auch in einer Schleife erzeugen. Dann kannst du Deiner Control jeweils einen DataRow-Member verpassen und beim erzeugen übergeben. Die Control sollte selbst das Wissen darüber beinhalten, welche der Daten der Row sie wo anzeigen soll.

EDIT: Du kannst die Control auch zur Laufzeit erzeugen, wo hast du denn das her das dasnicht geht?

MyControl myControl =newMyControl();

myTag.Controls.Add(myControl)

im richtigen Tag: Du bekommst in der Page einen Member vom Typ Control für jedes Tag dem Du ein runat="server" alsAttribut verpasst.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Tott666
myCSharp.de - Member

Avatar #avatar-1959.jpg


Dabei seit:
Beiträge: 186
Herkunft: Mönchengladbach

Themenstarter:

beantworten | zitieren | melden

Also, was ich jetzt hin bekommen habe sind die ascx zu laden:

        
Dim i As Int16
Dim ctl As Control

For i = 1 To 5
            ctl = Me.LoadControl("./Module/Suche.ascx")
            ctl.ID = "Ctl_0" & i
            Me.PlaceHolder1.Controls.Add(ctl)

Next i


Nur habe ich jetzt das Problem, wie bekomme ich die einzelnen txt-Felder angesprochen um ihnen unterschiedliche Werte zuzuweisen?

ODER

Wie kann ich in der ascx-Datei erkennen welche ID das Objekt hat.

Danke für weitere Hilfe
Ich weiß, dass ich nichts weiß 8)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Das "LoadControl" kannst Du Dir eigentlich sparen, wenn Du die Control so instanzierst, wie in meinem letzten Post beschrieben.
Die ID's innerhalb der Control bauen sich auf aus dem Namen, den du in der ascx-Datei für die Kontrollen vergibst, allerdings normalerweise mit einem Prefix, das sich über den "NamingContainer" der Control und den IdSeparator zurückverfolgen lässt.
Den Zugriff auf die Elemente innerhalb der Page betrifft das normalerweise nicht, du kannst normal über myControl.mySubControlId (so einen Member müsste es geben) zugreifen. Wie die Control dann auf dem Client heißt, verrät Dir die Property myControl.ClientId. Dies musst du zum Beispiel abfragen wenn du von der Control gepostete Parameter entgegennehmen willst.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Tott666
myCSharp.de - Member

Avatar #avatar-1959.jpg


Dabei seit:
Beiträge: 186
Herkunft: Mönchengladbach

Themenstarter:

beantworten | zitieren | melden

Hi,

kannst du mir evtl. die Zeile von dir in VB übersetzen?
Da hänge ich im moment dran, weil ich da keinen Kopf rein bekomme

MyControl myControl =newMyControl();

Danke für die Hilfe


Tott
Ich weiß, dass ich nichts weiß 8)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Sorry habe auch ein Leerzeichenvergessen. die Zeile sollte heißen:

MyControl myControl = new MyControl()

das wäre in VB etwa

Dim myControl As MyControl

wobei MyControl der Klassenname Deiner Control ist.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Tott666
myCSharp.de - Member

Avatar #avatar-1959.jpg


Dabei seit:
Beiträge: 186
Herkunft: Mönchengladbach

Themenstarter:

beantworten | zitieren | melden

Jetzt habe ich erst verstanden was du meinstest, durch deine mycontrol´s kam ich etwas durcheinander.

nur habe ich jetzt das problem, dass er es wohl macht (erkannt durch einzelschritte im debug) jedoch zeigt er sie nicht an.

wenn ich die eigenschaften prüfe bekommt jeder eine eigene uniqueid und alle sind visible = true, aber sehen kann ich sie trotzdem nicht

Hier der Code, der ja recht einfach ist (nußte new mit einbinden, sonst bekam ich Fehlermeldung)


            Dim i As Int16

            For i = 1 To 5
                Dim ctl As New ACR.modKFZSuche
                Me.phSuche.Controls.Add(ctl)
            Next i

Hier die Eigenschaften, wenn ich im Befehlsfenster nachfrage zur Laufzeit:


? ctl
{ACR.ACR.modKFZSuche}
    _page: {ASP.KFZ_Suche_aspx}
    Application: {System.Web.HttpApplicationState}
    Attributes: {System.Web.UI.AttributeCollection}
    AutoHandlers: 0
    BindingContainer: {ASP.KFZ_Suche_aspx}
    btn_Detail: Nothing
    Cache: {System.Web.Caching.Cache}
    ChildControlsCreated: False
    ClientID: "_ctl3"
    Context: {System.Web.HttpContext}
    Controls: {System.Web.UI.ControlCollection}
    designerPlaceholderDeclaration: Nothing
    EnableViewState: True
    Events: {System.ComponentModel.EventHandlerList}
    HasChildViewState: False
    ID: Nothing
    ID_SEPARATOR: ":"c
    Image1: Nothing
    IsPostBack: True
    IsTrackingViewState: True
    Label1: Nothing
    Label2: Nothing
    Label3: Nothing
    Label4: Nothing
    Label5: Nothing
    Label6: Nothing
    Label7: Nothing
    NamingContainer: {ASP.KFZ_Suche_aspx}
    Page: {ASP.KFZ_Suche_aspx}
    Parent: {System.Web.UI.WebControls.PlaceHolder}
    Request: {System.Web.HttpRequest}
    Response: {System.Web.HttpResponse}
    Server: {System.Web.HttpServerUtility}
    Session: {System.Web.SessionState.HttpSessionState}
    Site: Nothing
    SupportAutoEvents: True
    TemplateSourceDirectory: "/ACR"
    TextBox1: Nothing
    TextBox2: Nothing
    TextBox3: Nothing
    TextBox4: Nothing
    TextBox5: Nothing
    TextBox6: Nothing
    Trace: {System.Web.TraceContext}
    txtAA: Nothing
    UniqueID: "_ctl3"
    ViewState: {System.Web.UI.StateBag}
    ViewStateIgnoresCase: False
    Visible: True

welche eigenschaft fehlt mir noch, ich denke es dürfte nur noch eine Kleinigkeit sein.

Thanks Tott
Ich weiß, dass ich nichts weiß 8)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Hm ich kann eigentlich nichts auffälliges erkennen. Vielleicht ist Me.phSuche nicht visible, oder auch dynamisch erzeugt aber nicht in die Controls der Seite gepackt?

Sonst versuch mal statt Deinem eigenen Control irgenwas anderes hizuzufügen, z.B. Buttons oder so. Und dann sag mal Bescheid, ob die sichtbar werden. Wenn ja, liegt's wahrscheinlich irgendwo in der Control selbst...
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
Tott666
myCSharp.de - Member

Avatar #avatar-1959.jpg


Dabei seit:
Beiträge: 186
Herkunft: Mönchengladbach

Themenstarter:

beantworten | zitieren | melden

phSuche ist visible = true und die ascx wurden auch angezeigt als ich das über meinen ersten weg versucht habe, also kann es dadran eigentlich auch nicht liegen.

auf der ascx liegen auch textfelder und ein button, die müßten erscheinen.
Ich weiß, dass ich nichts weiß 8)
private Nachricht | Beiträge des Benutzers
MarsStein
myCSharp.de - Experte

Avatar #avatar-3191.gif


Dabei seit:
Beiträge: 3.170
Herkunft: Trier -> München

beantworten | zitieren | melden

Keine Ahnung warum das so nicht funktioniert. Ich kenne mich allerdings auch nicht so gut mit VBausaber hier dürfte die Sprache eigentlich keineRolle spielen. Die Objekte werden ja auch erstellt...
Aber wennsmit LoadControl funktioniert hat, kannst Du jaauch damit arbeiten.
Was die angezeigten Daten angeht:
Ein Member vom Typ DataRow in der Control (also deinen eigenen DataRow-Typen), und eine Set-Property dafür. In der Set-Property kannst Du dann die Textboxen besetzen.
Oder einfach eine Set-Methode die die DataRow als Parameter annimmt.
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
private Nachricht | Beiträge des Benutzers
hurricane
myCSharp.de - Member

Avatar #avatar-1740.jpg


Dabei seit:
Beiträge: 379
Herkunft: bei Berlin

beantworten | zitieren | melden

@Tott666: Du könntest statt einem UserControl natürlich auch einen Repeater oder eine DataList verwenden. Dort kannst du eine Tabelle verwenden die du nach deinen wünschen gestalten kannst und die Datenbindung ist auch ganz einfach.
Kannst es dir ja mal anschauen

cioa Anke
private Nachricht | Beiträge des Benutzers
.Kai
myCSharp.de - Member

Avatar #avatar-1836.gif


Dabei seit:
Beiträge: 1.130

beantworten | zitieren | melden

Genau, gibt es einen Grund warum hiefür der Umweg über ein UserControl gegangen wird?

Selbst wenn Du tatsächlich ein UserControl verwenden möchtest, würde es mehr Sinn machen in dem UserControl einen Repeater zu verwenden. Du instanzierst das Control dann nur ein einziges Mal.
private Nachricht | Beiträge des Benutzers