Hi,
i have created a dynamically docking control. At Page_Init (not Postback) I initialize the Docks. But when I move one of the docks every dock is in his start position in the dockingzone after postback, so I can't change the position of the single docks.
ViewState is disabled.
I hope someone can help me. Thx for help.
ascx:
vb.net:
i have created a dynamically docking control. At Page_Init (not Postback) I initialize the Docks. But when I move one of the docks every dock is in his start position in the dockingzone after postback, so I can't change the position of the single docks.
ViewState is disabled.
I hope someone can help me. Thx for help.
ascx:
| <asp:UpdatePanel runat="server" ID="UpdatePanel1"> |
| <ContentTemplate> |
| <rad:RadDockLayout runat="server" ID="RadDockLayout1" OnSaveDockLayout="RadDockLayout1_SaveDockLayout" OnLoadDockLayout="RadDockLayout1_LoadDockLayout" > |
| <rad:RadDockZone ID="RadDockZoneFelder" runat="server" /> |
| </rad:RadDockLayout> |
| </ContentTemplate> |
| </asp:UpdatePanel> |
vb.net:
| Private Property CurrentDockStates() As List(Of DockState) |
| Get |
| 'Store the info about the added docks in the session. For real life |
| ' applications we recommend using database or other storage medium |
| ' for persisting this information. |
| Dim _currentDockStates As List(Of DockState) = DirectCast(Session("CurrentDockStatesDynamicDocks"), List(Of DockState)) |
| If [Object].Equals(_currentDockStates, Nothing) Then |
| _currentDockStates = New List(Of DockState)() |
| Session("CurrentDockStatesDynamicDocks") = _currentDockStates |
| End If |
| Return _currentDockStates |
| End Get |
| Set(ByVal value As List(Of DockState)) |
| Session("CurrentDockStatesDynamicDocks") = value |
| End Set |
| End Property |
| Private Sub CreateSaveStateTrigger(ByVal dock As RadDock) |
| 'Ensure that the RadDock control will initiate postback |
| ' when its position changes on the client or any of the commands is clicked. |
| 'Using the trigger we will "ajaxify" that postback. |
| dock.AutoPostBack = True |
| dock.CommandsAutoPostBack = True |
| Dim saveStateTrigger As New AsyncPostBackTrigger() |
| saveStateTrigger.ControlID = dock.ID |
| saveStateTrigger.EventName = "DockPositionChanged" |
| UpdatePanel1.Triggers.Add(saveStateTrigger) |
| saveStateTrigger = New AsyncPostBackTrigger() |
| saveStateTrigger.ControlID = dock.ID |
| saveStateTrigger.EventName = "Command" |
| UpdatePanel1.Triggers.Add(saveStateTrigger) |
| End Sub |
| Private Function CreateRadDockFromState(ByVal state As DockState) As RadDock |
| Dim dock As New RadDock() |
| dock.DockMode = DockMode.Docked |
| dock.ID = String.Format("radDock{0}", state.UniqueName) |
| dock.Text = state.UniqueName |
| 'dock.Controls.Add(Me.erzeugeNeuenTabellenEintragFeld(state.UniqueName)) |
| dock.ApplyState(state) |
| dock.Commands.Add(New DockCloseCommand()) |
| dock.Commands.Add(New DockExpandCollapseCommand()) |
| Return dock |
| End Function |
| Protected Sub RadDockLayout1_LoadDockLayout(ByVal sender As Object, ByVal e As DockLayoutEventArgs) |
| 'Populate the event args with the state information. The RadDockLayout control |
| ' will automatically move the docks according that information. |
| For Each state As DockState In CurrentDockStates |
| e.Positions(state.UniqueName) = state.DockZoneID |
| e.Indices(state.UniqueName) = state.Index |
| Next |
| End Sub |
| Protected Sub RadDockLayout1_SaveDockLayout(ByVal sender As Object, ByVal e As DockLayoutEventArgs) |
| 'Save the dock state in the page Session. This will enable us |
| ' to recreate the dock in the next Page_Init. |
| CurrentDockStates = RadDockLayout1.GetRegisteredDocksState() |
| End Sub |
| Protected Sub RadDock1_DockPositionChanged(ByVal sender As Object, ByVal e As DockPositionChangedEventArgs) |
| Dim dock As RadDock = DirectCast(sender, RadDock) |
| If e.DockZoneID = [String].Empty Then |
| dock.Text = [String].Format("I used to be in {0} but now I am floating.", _ |
| dock.DockZoneID) |
| Else |
| If dock.DockZoneID = [String].Empty Then |
| dock.Text = "I used to be floating, but now I am docked in " + _ |
| e.DockZoneID |
| ElseIf dock.DockZoneID <> e.DockZoneID Then |
| dock.Text = [String].Format("I moved from {0} to {1}.", _ |
| dock.DockZoneID, e.DockZoneID) |
| Else |
| dock.Text = [String].Format("I moved from position {0} to position {1}.", _ |
| dock.Index.ToString(), e.Index.ToString()) |
| End If |
| End If |
| If Not Me.Session("liste_felder") Is Nothing Then |
| Dim tobjListeFelder As ArrayList |
| tobjListeFelder = Me.Session("liste_felder") |
| End If |
| End Sub |
| ''' <summary> |
| ''' Seite initialisieren |
| ''' </summary> |
| Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Init |
| Me._id_produkt = Me.globalContext.QueryString("id_produkt") |
| btnZurueck.url = Me.globalContext.URLContext.ermittleURL_AlleParameterAdmin(Me.globalContext.URLContext.id_seite, Me.globalContext.URLContext.id_seite, Me.globalContext.URLContext.id_vonmodul, -1, Me._id_produkt, -1, , , , , , , True, "id_produkt=") |
| If Not Me.IsPostBack() Then |
| Dim tAnzahl As Integer |
| Dim tobjKonditionendefinitionenListe As New class_banken_produktdb_konditionendefinitionen_liste() |
| ' Anzahl der schon definierten Felder ermitteln |
| tAnzahl = tobjKonditionendefinitionenListe.ermittleAnzahlBeiProduktvonTab_banken_konditionendefinitionen(Me._id_produkt) |
| ' Anzahl und Felder initialisieren |
| If tAnzahl = 0 Then |
| Me.Session.Add("anzahl_felder", 0) |
| Me.Session.Add("liste_felder", New ArrayList()) |
| Else |
| Me.Session.Add("anzahl_felder", tAnzahl) |
| Me.Session.Add("liste_felder", Me.setzeListeFelder()) |
| End If |
| ' Erzeugt die Controls |
| Me.erzeugeInhalte() |
| Else |
| ''Recreate the docks in order to ensure their proper operation |
| Dim i As Integer = 0 |
| While i < CurrentDockStates.Count |
| Dim dock As RadDock = CreateRadDockFromState(CurrentDockStates(i)) |
| 'We will just add the RadDock control to the RadDockLayout. |
| ' You could use any other control for that purpose, just ensure |
| ' that it is inside the RadDockLayout control. |
| ' The RadDockLayout control will automatically move the RadDock |
| ' controls to their corresponding zone in the LoadDockLayout |
| ' event (see below). |
| RadDockLayout1.Controls.Add(dock) |
| 'We want to save the dock state every time a dock is moved. |
| CreateSaveStateTrigger(dock) |
| System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) |
| End While |
| End If |
| End Sub |
| ''' <summary> |
| ''' Setzt die Liste mit den vorhanden Controls |
| ''' </summary> |
| Private Function setzeListeFelder() As ArrayList |
| Dim tobjListe As New ArrayList |
| Dim tobjKonditonendefinitionen As class_banken_produktdb_konditionendefinitionen |
| Dim tobjKonditionendefinitionenListe As New class_banken_produktdb_konditionendefinitionen_liste() |
| ' Alle vorhanden Definitionen ermitteln und die IDs als Liste zurückliefern, somit kann später ein |
| ' Abgleich gemacht werden ob die Definition schon in der DB ist oder nicht, d.h. neu geschrieben werden |
| ' muss oder nicht |
| tobjKonditionendefinitionenListe.ermittleListeBeiProduktvonTab_banken_konditionendefinitionen(Me._id_produkt) |
| For Each tobjKonditonendefinitionen In tobjKonditionendefinitionenListe |
| tobjListe.Add(tobjKonditonendefinitionen.getValue("id")) |
| Next |
| Return tobjListe |
| End Function |
| ''' <summary> |
| ''' Erzeugt den Inhalt für die dynamisch angelegten Felder |
| ''' </summary> |
| Private Sub erzeugeInhalte() |
| ' Erzeuge die Inhalte für die liste_felder |
| If Not Me.Session("liste_felder") Is Nothing Then |
| For Each tid_definition As Integer In Me.Session("liste_felder") |
| Dim tobjRadDock As New RadDock() |
| tobjRadDock.ID = "radDock" & tid_definition |
| tobjRadDock.DockMode = DockMode.Docked |
| tobjRadDock.UniqueName = tid_definition |
| tobjRadDock.Title = tid_definition |
| tobjRadDock.Text = tid_definition |
| 'tobjRadDock.AutoPostBack = True |
| 'AddHandler tobjRadDock.DockPositionChanged, AddressOf RadDock1_DockPositionChanged |
| tobjRadDock.Controls.Add(Me.erzeugeNeuenTabellenEintragFeld(tid_definition)) |
| Me.RadDockZoneFelder.Controls.Add(tobjRadDock) |
| CreateSaveStateTrigger(tobjRadDock) |
| 'Me.paInhaltKonditionDefinitionen.Controls.Add(Me.erzeugeNeuenTabellenEintragFeld(tid_definitiion)) |
| Next |
| End If |
| End Sub |