Hello,
I may have some trouble about Dynamic Saving & Loading docks from MS SQL DATABASE.
Please Help Me!!!
This is my default.cs file!
is there any sample for "dynamic add" + "SAVE&LOAD" for us?
error message "serializer doesn't support 'Telerik.Web.UI.DockState'."
I may have some trouble about Dynamic Saving & Loading docks from MS SQL DATABASE.
Please Help Me!!!
This is my default.cs file!
is there any sample for "dynamic add" + "SAVE&LOAD" for us?
error message "serializer doesn't support 'Telerik.Web.UI.DockState'."
| using System; |
| using System.Data; |
| using System.Data.SqlClient; |
| using System.Configuration; |
| using System.Collections; |
| using System.Web; |
| using System.Web.Security; |
| using System.Web.UI; |
| using System.Web.UI.WebControls; |
| using System.Web.UI.WebControls.WebParts; |
| using System.Web.UI.HtmlControls; |
| using System.Web.Script.Serialization; |
| using System.Collections.Generic; |
| using Telerik.Web.UI; |
| using System.Text; |
| public partial class index : System.Web.UI.Page |
| { |
| protected string LoadUserData(string UserAccount) |
| { |
| SqlConnection conn = new SqlConnection("Data Source=(LOCAL);;Initial Catalog=BPMDB;User ID=sa;Password=*******"); |
| conn.Open(); |
| string SQLStr = "SELECT [string] FROM [index_position] WHERE (id_user = '" + UserAccount + "')"; |
| SqlCommand cmd3 = new SqlCommand(SQLStr, conn); |
| SqlDataAdapter sda = new SqlDataAdapter(cmd3); |
| DataTable dt = new DataTable(); |
| sda.Fill(dt); |
| string posiStr = dt.Rows[0].ItemArray[0].ToString(); |
| return posiStr; |
| } |
| protected bool UserDataChecker(string UserAccount) |
| { |
| SqlConnection conn = new SqlConnection("Data Source=(LOCAL);;Initial Catalog=BPMDB;User ID=sa;Password=1*********"); |
| conn.Open(); |
| string SQLStr = "SELECT [string] FROM [index_position] WHERE (id_user = '" + UserAccount + "')"; |
| SqlCommand cmd3 = new SqlCommand(SQLStr, conn); |
| SqlDataReader dr = cmd3.ExecuteReader(); |
| if (dr.Read()) |
| { |
| //not insert |
| return true; |
| } |
| else |
| { |
| //insert |
| return false; |
| } |
| } |
| private bool _dockStateCleared = false; |
| private List<DockState> CurrentDockStates |
| { |
| get |
| { |
| List<DockState> _currentDockStates = (List<DockState>)Session["CurrentDockStatesMyPortal"];//UserDataLoader(AspxHelper.LoginUserAccount.ToString()); |
| if (Object.Equals(_currentDockStates, null)) |
| { |
| _currentDockStates = new List<DockState>(); |
| Session["CurrentDockStatesMyPortal"] = _currentDockStates; |
| } |
| return _currentDockStates; |
| } |
| set |
| { |
| Session["CurrentDockStatesMyPortal"] = value; |
| } |
| } |
| //private List<DockState> CurrentDockStates = new List<DockState>(); |
| protected void Page_Init(object sender, EventArgs e) |
| { |
| //if(UserDataChecker(AspxHelper.LoginUserAccount.ToString())) |
| // CurrentDockStates = UserDataLoader(AspxHelper.LoginUserAccount.ToString()); |
| foreach (DockState state in CurrentDockStates) |
| { |
| if (state.Closed == false) |
| { |
| RadDock dock = CreateRadDockFromState(state); |
| RadDockLayout1.Controls.Add(dock); |
| CreateSaveStateTrigger(dock); |
| LoadWidget(dock); |
| } |
| } |
| } |
| protected void Page_Load(object sender, EventArgs e) |
| { |
| PageHeader1.SelectedPageIndex = 0; |
| this.Title = "SmartBPM.NET--" + PageHeader1.SelectedPageName; |
| if (!IsPostBack) |
| { |
| DropDownZone.DataBind(); |
| } |
| } |
| private void LoadWidget(RadDock dock) |
| { |
| if (string.IsNullOrEmpty(dock.Tag)) |
| { |
| return; |
| } |
| Control widget = LoadControl(dock.Tag); |
| dock.ContentContainer.Controls.Add(widget); |
| } |
| private void CreateSaveStateTrigger(RadDock dock) |
| { |
| //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; |
| AsyncPostBackTrigger saveStateTrigger = 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); |
| } |
| private RadDock CreateRadDockFromState(DockState state) |
| { |
| //建立一個dock並設定可用之動作(關閉、收合) |
| RadDock dock = new RadDock(); |
| dock.DockMode = DockMode.Docked; |
| dock.ID = string.Format("RadDock{0}", state.UniqueName); |
| dock.ApplyState(state); |
| dock.Commands.Add(new DockCloseCommand()); |
| dock.Commands.Add(new DockExpandCollapseCommand()); |
| return dock; |
| } |
| private RadDock CreateRadDock(string title) |
| { |
| int docksCount = CurrentDockStates.Count; |
| RadDock dock = new RadDock(); |
| dock.DockMode = DockMode.Docked; |
| dock.UniqueName = Guid.NewGuid().ToString(); |
| dock.ID = string.Format("RadDock{0}", dock.UniqueName); |
| dock.Title = title; |
| dock.Text = string.Format("Added at {0}", DateTime.Now); |
| dock.Width = Unit.Pixel(300); |
| dock.Commands.Add(new DockCloseCommand()); |
| dock.Commands.Add(new DockExpandCollapseCommand()); |
| return dock; |
| } |
| protected void RadDockLayout1_LoadDockLayout(object sender, DockLayoutEventArgs e) |
| { |
| //CurrentDockStates = UserDataLoader(AspxHelper.LoginUserAccount.ToString()); |
| JavaScriptSerializer serializer = new JavaScriptSerializer(); |
| string str = LoadUserData(AspxHelper.LoginUserAccount.ToString()); |
| string[] currentDockStates2 = str.Split('|'); |
| foreach (string stringState in currentDockStates2) |
| { |
| if (stringState != string.Empty) |
| { |
| DockState state = serializer.Deserialize<DockState>(stringState); |
| e.Positions[state.UniqueName] = state.DockZoneID; |
| e.Indices[state.UniqueName] = state.Index; |
| } |
| } |
| } |
| protected void RadDockLayout1_SaveDockLayout(object sender, DockLayoutEventArgs e) |
| { |
| string dockState; |
| JavaScriptSerializer serializer = new JavaScriptSerializer(); |
| List<DockState> stateList = RadDockLayout1.GetRegisteredDocksState(); |
| StringBuilder serializedList = new StringBuilder(); |
| int i = 0; |
| while (i < stateList.Count) |
| { |
| serializedList.Append(serializer.Serialize(stateList[i])); |
| serializedList.Append("|"); |
| i++; |
| } |
| dockState = serializedList.ToString(); |
| bool ExistOrNot = UserDataChecker(AspxHelper.LoginUserAccount.ToString()); |
| SqlConnection conn = new SqlConnection("Data Source=(LOCAL);;Initial Catalog=BPMDB;User ID=sa;Password=16*******"); |
| conn.Open(); |
| if (ExistOrNot) |
| { |
| //update |
| string SQLStr = "UPDATE index_position SET string='" + dockState + "' WHERE id_user = '" + AspxHelper.LoginUserAccount + "'"; |
| SqlCommand cmd3 = new SqlCommand(SQLStr, conn); |
| cmd3.ExecuteNonQuery(); |
| } |
| else |
| { |
| //insert |
| string SQLStr = "INSERT INTO index_position(id_user,string)VALUES('" + AspxHelper.LoginUserAccount + "','" + dockState + "')"; |
| SqlCommand cmd3 = new SqlCommand(SQLStr, conn); |
| cmd3.ExecuteNonQuery(); |
| } |
| } |
| public ArrayList GetZones() |
| { |
| ArrayList zones = new ArrayList(); |
| zones.Add(RadDockZone1); |
| zones.Add(RadDockZone2); |
| return zones; |
| } |
| protected void ButtonAddDock_Click(object sender, EventArgs e) |
| { |
| RadDock dock = CreateRadDock(DroptDownWidget.SelectedItem.Text); |
| //find the target zone and add the new dock there |
| RadDockZone dz = (RadDockZone)FindControl(DropDownZone.SelectedItem.Text); |
| dz.Controls.Add(dock); |
| CreateSaveStateTrigger(dock); |
| //Load the selected widget in the RadDock control |
| dock.Tag = DroptDownWidget.SelectedValue; |
| LoadWidget(dock); |
| } |
| protected void ButtonPostBack_Click(object sender, EventArgs e) |
| { |
| } |
| protected void ButtonClear_Click(object sender, EventArgs e) |
| { |
| } |
| } |