User Control mit Übergabe eines WebControls als Eigenschaft

17/06/2008 - 13:42 von Jürgen Kraus | Report spam
Hallo!

Ich habe eine Frage zur Benutzung der User Controls. Ich habe für die
Bearbeitung bestimmter TextBoxen ein Panel mit mehreren Buttons als
"Werkzeugleiste" erstellt, das auf einer Seite mehrfach vorkommen kann.

Um das ganze komfortabler & übersichtlicher zu gestalten, habe ich das
Panel in ein User Control ausgelagert und mit passenden Properties
versehen, die den Bezug zur TextBox herstellen.

Etwa so:


Public Property TargetTextBox() as TextBox
Get

Set

End Property


Wenn ich die Eigenschaft programmatisch belege, dann funktioniert mein UC
einwandfrei:

Me.UCEditPanel1.TargetTextBox = Me.TextBox2


Jetzt würde ich gerne noch einen Schritt weitergehen und das Ganze
deklarativ im ASP-Seitenentwurf übergeben, also

<uc1:UCEditPanel ID="UCEditPanel1" runat="server" TargetTextBox="TextBox2"
/>

Und hier ist mein Problem: Natürlich weiss ich, dass ich mit o.g. Zeile
bei TargetTextBox kein Objekt (in diesem Fall: WebControl) übergebe,
sondern nur einen String.

Aber wie gelange ich nun elegant an das zugrundeliegende Objekt?

Ich habe es im UC-CodeBehind mit FindControl versucht, aber in meinem
komplexen Gebilde (mit Masterpage) scheint mein Programm nie etwas zu
finden:

Dim ttb as TextBox = DirectCast(Me.Page.Master.FindControl(TargetTextBox),
TextBox)

Das Debugging ergab, das die Variable TargetTextBox richtig gefüllt ist
(z.B. "TextBox2"), aber FindControl trotzdem NOTHING zurückgibt.

ISt das überhaupt der richtige Ansatz? Oder geht das noch viel einfacher?

Ich wàre für ein Stichwort oder einen Hinweis dankbar, wo ich weiter
nachlesen kann. :-)

Schon mal vielen Dank vorab (für's Lesen meines Beitrags & Lösung suchen)

Grüße

Jürgen
 

Lesen sie die antworten

#1 Thomas Bandt
17/06/2008 - 14:19 | Warnen spam
Jallo Jürgen,

Jürgen Kraus schrieb:
Ich habe eine Frage zur Benutzung der User Controls. Ich habe für die
Bearbeitung bestimmter TextBoxen ein Panel mit mehreren Buttons als
"Werkzeugleiste" erstellt, das auf einer Seite mehrfach vorkommen kann.

Um das ganze komfortabler & übersichtlicher zu gestalten, habe ich das
Panel in ein User Control ausgelagert und mit passenden Properties
versehen, die den Bezug zur TextBox herstellen.



das ist schonmal der richtige Ansatz :-).

Etwa so:


Public Property TargetTextBox() as TextBox
Get

Set

End Property



Das wiederum würde ich nicht machen, sondern über
Properties immer nur Werte bzw. ControlIDs, je
nachdem was du vorhast, übergeben.

Wenn ich die Eigenschaft programmatisch belege, dann funktioniert mein
UC einwandfrei:

Me.UCEditPanel1.TargetTextBox = Me.TextBox2


Jetzt würde ich gerne noch einen Schritt weitergehen und das Ganze
deklarativ im ASP-Seitenentwurf übergeben, also

<uc1:UCEditPanel ID="UCEditPanel1" runat="server"
TargetTextBox="TextBox2" />

Und hier ist mein Problem: Natürlich weiss ich, dass ich mit o.g. Zeile
bei TargetTextBox kein Objekt (in diesem Fall: WebControl) übergebe,
sondern nur einen String.



Eben.

Aber wie gelange ich nun elegant an das zugrundeliegende Objekt?

Ich habe es im UC-CodeBehind mit FindControl versucht, aber in meinem
komplexen Gebilde (mit Masterpage) scheint mein Programm nie etwas zu
finden:

Dim ttb as TextBox =
DirectCast(Me.Page.Master.FindControl(TargetTextBox), TextBox)

Das Debugging ergab, das die Variable TargetTextBox richtig gefüllt ist
(z.B. "TextBox2"), aber FindControl trotzdem NOTHING zurückgibt.

ISt das überhaupt der richtige Ansatz? Oder geht das noch viel einfacher?



Ja, der Ansatz stimmt.

Ich wàre für ein Stichwort oder einen Hinweis dankbar, wo ich weiter
nachlesen kann. :-)



Ich würde es rekursiv machen, dann musst du dich nicht
mehr darum kümmern, wo du deine "Werkzeugleiste"
platzierst.

Das bekommst du hin, in dem du eine Methode "GetFieldValue"
o.à. erstellst, die sich selbst rekursiv solange aufruft,
bis der Wert gefunden ist.

Das Problem ist noch, dass die TextBox oder was auch immer
ja "irgendwo" sein kann, das würde ich eingrenzen, z.B.
mit einem Panel dessen ID du auch übergibst.

Dann gehst du von unten solange nach oben, bis du das Panel
gefunden hast. In diesem Panel suchst du dann das Control,
wie z.B. hier:

http://www.69grad.de/30/164/de/blog...chern.html

Ist schon etwas komplexer, deswegen kann ich dir jetzt auf
die Schnelle den Code nicht zusammentippen.

Gruß, Thomas [MVP ASP/ASP.NET]
http://www.69grad.de - Beratung, Entwicklung
http://www.dotnetjob.de - .NET-Stellenmarkt
http://blog.thomasbandt.de - Thomas goes .NET

Ähnliche fragen