2010-08-11 41 views
0

這裏是代碼: VB: 進口System.Web.Script.SerializationTelerik Dock複製框和「_breaking_」網頁,我該如何解決這個問題?

分部類MyLanding 繼承System.Web.UI.Page 私人LoginClass作爲新LoginClass 私人_dockStateCleared由於布爾=假 私人_conn作爲新的SqlConnection(ConfigurationManager.ConnectionStrings( 「MidwestPartsConnectionString」)。ConnectionString的)

Private ReadOnly Property CurrentDockStates() As List(Of DockState) 
    Get 
     'Get saved state string from the database - set it to dockState variable for example 
     Dim dockStatesFromDB As String = "" 

     _conn.Open() 
     Dim command As New SqlCommand("SELECT JavascriptStr FROM SysProperties WHERE (UserID = @UserID)", _conn) 
     command.Parameters.Add("@UserID", SqlDbType.UniqueIdentifier).Value = Me.LoginClass.ReturnUserID() 
     Try 
      dockStatesFromDB = command.ExecuteScalar().ToString() 
      _conn.Close() 
     Catch ex As Exception 
      _conn.Close() 
      Me.CreateSavedLayout("") 
     End Try 

     Dim _currentDockStates As New List(Of DockState)() 
     Dim stringStates As String() = dockStatesFromDB.Split("|"c) 
     For Each stringState As String In stringStates 
      If stringState.Trim() <> String.Empty Then 
       _currentDockStates.Add(DockState.Deserialize(stringState)) 
      End If 
     Next 
     Return _currentDockStates 
    End Get 
End Property 


Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender 
    If Not Page.IsPostBack Then 
     If CurrentDockStates.Count = 0 Then 
      Me.LoadItems() 
     End If 
    End If 
End Sub 

Protected Sub Page_Init(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Init 
    Dim i As Integer = 0 
    While i < CurrentDockStates.Count 
     If CurrentDockStates(i).Closed = False Then 
      Dim dock As RadDock = CreateRadDockFromState(CurrentDockStates(i)) 
      dlColumnOne.Controls.Add(dock) 
      CreateSaveStateTrigger(dock) 
      LoadUserControl(dock) 
     End If 
     System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) 
    End While 
End Sub 

Protected Sub dlColumnOne_LoadDockLayout(ByVal sender As Object, ByVal e As DockLayoutEventArgs) 
    For Each state As DockState In CurrentDockStates 
     e.Positions(state.UniqueName) = state.DockZoneID 
     e.Indices(state.UniqueName) = state.Index 
    Next 
End Sub 
Protected Sub dlColumnOne_SaveDockLayout(ByVal sender As Object, ByVal e As DockLayoutEventArgs) 
    Dim stateList As List(Of DockState) = dlColumnOne.GetRegisteredDocksState() 
    Dim serializedList As New StringBuilder() 
    Dim i As Integer = 0 

    While i < stateList.Count 
     serializedList.Append(stateList(i).ToString()) 
     serializedList.Append("|") 
     System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) 
    End While 

    Dim dockState As String = serializedList.ToString() 
    If dockState.Trim() <> [String].Empty Then 
     _conn.Open() 
     Dim command As New SqlCommand([String].Format("update sysproperties set javascriptstr = '{0}' Where UserID = @UserID ", dockState), _conn) 
     command.Parameters.Add("@UserID", SqlDbType.UniqueIdentifier).Value = Me.LoginClass.ReturnUserID() 
     command.ExecuteNonQuery() 
     _conn.Close() 
    End If 
End Sub 

Private Function CreateRadDockFromState(ByVal state As DockState) As RadDock 
    Dim dock As New RadDock() 
    dock.DockMode = DockMode.Docked 
    dock.UniqueName = state.UniqueName 
    dock.ID = String.Format("RadDock{0}", dock.UniqueName) 
    dock.ApplyState(state) 
    dock.Commands.Add(New DockCloseCommand()) 
    dock.Commands.Add(New DockExpandCollapseCommand()) 
    Return dock 
End Function 

Private Function CreateRadDock(ByVal DockTitle As String) As RadDock 
    Dim docksCount As Integer = CurrentDockStates.Count 
    Dim dock As New RadDock 
    dock.DockMode = DockMode.Docked 
    Dim UniqueName As String = Guid.NewGuid().ToString() 
    UniqueName = UniqueName.Replace("-", "") 
    dock.UniqueName = UniqueName 
    dock.ID = String.Format("RadDock{0}", UniqueName) 
    dock.Title = DockTitle 
    dock.Width = Unit.Pixel(400) 
    dock.Commands.Add(New DockCloseCommand()) 
    dock.Commands.Add(New DockExpandCollapseCommand()) 
    Return dock 
End Function 

Private Sub LoadItems() 
    Dim DocksDataTable As DataTable = Me.ReturnReports() 
    For i = 0 To DocksDataTable.Rows.Count() - 1 
     Dim dock As RadDock = Me.CreateRadDock(DocksDataTable.Rows(i).Item("ReportTitle").ToString()) 
     Dim dz As RadDockZone = Me.dzColumnOne 
     Dim dl As RadDockLayout = Me.dlColumnOne 
     dz.Controls.Add(dock) 
     Me.CreateSaveStateTrigger(dock) 
     dock.Tag = DocksDataTable.Rows(i).Item("ReportPath") 
     Me.LoadUserControl(dock) 
    Next 
End Sub 

Public Function ReturnReports() As DataTable 
    Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrings("MidwestPartsConnectionString").ConnectionString) 
    Dim Query As String = "SELECT Reports.ReportPath, Reports.ReportTitle, UserReports.UserID FROM UserReports INNER JOIN Reports ON UserReports.ReportID = Reports.ReportID WHERE (UserReports.UserID = @UserID)" 
    Dim adapter As New SqlDataAdapter 
    adapter.SelectCommand = New SqlCommand(Query, connection) 
    adapter.SelectCommand.Parameters.Add("@UserID", SqlDbType.UniqueIdentifier).Value = Me.LoginClass.ReturnUserID() 
    Dim table1 As New DataTable 
    connection.Open() 
    Try 
     adapter.Fill(table1) 
    Finally 
     connection.Close() 
    End Try 
    Return table1 
End Function 

Private Function ReturnLayout() As DataTable 
    Dim connection As New SqlConnection(ConfigurationManager.ConnectionStrings("MidwestPartsConnectionString").ConnectionString) 
    Dim Query As String = "select * from sysproperties" 
    Dim adapter As New SqlDataAdapter 
    adapter.SelectCommand = New SqlCommand(Query, connection) 
    adapter.SelectCommand.Parameters.Add("@UserPropertiesID", SqlDbType.Int).Value = 1 
    Dim table1 As New DataTable 
    connection.Open() 
    Try 
     adapter.Fill(table1) 
    Finally 
     connection.Close() 
    End Try 
    Return table1 
End Function 

Private Sub LoadUserControl(ByVal dock As RadDock) 
    If String.IsNullOrEmpty(dock.Tag) Then 
     Return 
    End If 
    Dim usercontrol As Control = LoadControl(dock.Tag) 
    dock.ContentContainer.Controls.Add(usercontrol) 
End Sub 

Private Sub CreateSaveStateTrigger(ByVal dock As RadDock) 
    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 Sub CreateSavedLayout(ByVal JavascriptStr As String) 
    Dim sqlConn As New SqlConnection(ConfigurationManager.ConnectionStrings("MidwestPartsConnectionString").ConnectionString)   
    Dim strSqlInsert As String = "INSERT INTO SysProperties(UserID, JavascriptStr) VALUES (@UserID, @JavascriptStr)" 
    strSqlInsert += "; SELECT SCOPE_IDENTITY() ;" 
    Dim sqlCmd As New SqlCommand(strSqlInsert, sqlConn) 
    With sqlCmd.Parameters 
     .Add("@JavascriptStr", SqlDbType.Text).Value = JavascriptStr 
     .Add("@UserID", SqlDbType.UniqueIdentifier).Value = Me.LoginClass.ReturnUserID() 
    End With 
    sqlCmd.Connection.Open() 
    sqlCmd.ExecuteScalar() 
    sqlCmd.Connection.Close() 
End Sub 


Protected Sub btnAddReports_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddReports.Click 
    Try 
     Response.Redirect("~/MyUserAccount/SelectedReports.aspx", False) 
    Catch ex As Exception 

    End Try 
End Sub 

末級

回答

0

你可能看起來不錯。對於這個問題的可能原因包括以下幾點:

  • 拖動停靠控制很快引起AJAX衝突,並顯示一個錯誤。爲了避免這種情況的發生,您可以在ajax請求的過程中顯示一個AjaxLoading面板(在telerik論壇中搜索/詢問如何執行此操作的示例)。另外,您應該確保您網站上的UpdatePanel配置爲以下在線演示:http://demos.telerik.com/aspnet-ajax/dock/examples/myportal/defaultcs.aspx

  • 該錯誤是ViewState問題的結果。這個telerik論壇線程提供了一個可能的解決方案:www.telerik.com/community/forums/aspnet-ajax/docking/failed-to-load-view-state-error-when-moving-dynamically-created-widgets-around-the -raddocklayout.aspx

相關問題