Dotlab – Development and other evil things


Parameter an Telerik DockableObject Form mit Reflection übergeben

Veröffentlicht in .net Stuff von dotlab am Februar 27, 2008
Tags: , , , ,

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!