Parameter an Telerik DockableObject Form mit Reflection übergeben
Eine kleine Knacknuss hat sich bei der Verwendung der Telerik Docking Zones (DZ) rsp. Dockable Objects (DO) ergeben. Folgende Situation: drei DZ liegen nebeneinander, alle werden dynamisch mit DO gefüllt. Als ContentTemplate wird für jedes DO ein eigenes Control definiert, welches nach dem Aufklappen des DO eine umfangreiche Editmaske zur Verfügung stellt. Soweit so gut, bloss muss dem Control innerhalb des DO ein Parameter übergeben werden, damit dort die ID des DO zur Verfügung steht. Alles klar?
Der erste Versuch nur über ein Property war nicht von Erfolg gekrönt. Die Lösung heisst: Reflection! Hier ein Vorschlag, wie die Create Methode aussehen könnte:
Function CreateDockableObject(ByVal _Id As Integer, ByVal _Text As String) As RadDockableObject
'create new dockable object
Dim dObj As New RadDockableObject
dObj.ID = _Id
dObj.Text = _Text
dObj.DockingMode = RadDockingModeFlags.AlwaysDock
dObj.Expanded = False
dObj.Width = "250"
'load a user control as a template
Dim myUC As UserControl
myUC = CType(LoadControl("Controls/ModulEdit.ascx"), UserControl)
Dim ucType As Type = myUC.GetType()
'pass a parameter to the user control
Dim ucProperty As Reflection.PropertyInfo = ucType.GetProperty("mId")
ucProperty.SetValue(myUC, _Id, Nothing)
'add user control to dockable object template
dObj.ContentTemplate = myUC
Return dObj
End Function
Natürlich muss im Control ein entsprechendes Property (hier „mId“) vorhanden sein. Ist dies der Fall, funktioniert alles bestens!