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
Ich weiß, dass ich nichts weiß 8)
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
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)
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
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)
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
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)
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
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)
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
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)
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
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)
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
@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
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.