Hi,
I am creating raddock controls dynamically based on the data from the database. Everything is working except the state is not changing on the initial postback. It works perfectly afterwards. Am I missing anything?
I am saving the state to the database after every change. Below is the code snippet of the page and the user control. Please take a look and let me know if I am missing anything.
TabDash.aspx
TabDash.aspx.cs
Tab1.ascx
Tab1.ascx.cs
Thanks,
NK
I am creating raddock controls dynamically based on the data from the database. Everything is working except the state is not changing on the initial postback. It works perfectly afterwards. Am I missing anything?
I am saving the state to the database after every change. Below is the code snippet of the page and the user control. Please take a look and let me know if I am missing anything.
TabDash.aspx
<%@ Page Title="" Language="C#" MasterPageFile="~/Desktop/MasterPages/Dasboard.master" AutoEventWireup="true" CodeFile="TabDash.aspx.cs" Inherits="Desktop_TabDash" %><
br
><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><
br
><%@ Register TagPrefix="azimaDLI" TagName="Tab1" Src="~/Desktop/Controls/Tab1.ascx" %><
br
><
br
><
asp:Content
ID
=
"Content1"
ContentPlaceHolderID
=
"head"
Runat
=
"Server"
><
br
></
asp:Content
><
br
><
asp:Content
ID
=
"Content2"
ContentPlaceHolderID
=
"mainContent"
Runat
=
"Server"
><
br
> <
br
> <
script
type
=
"text/javascript"
src
=
"FusionCharts/FusionCharts.js"
></
script
><
br
> <
script
type
=
"text/javascript"
src
=
"Scripts/contextHelp.js?"
></
script
><
br
><
br
> <
telerik:RadScriptManager
runat
=
"server"
ID
=
"RadScriptManager1"
/><
br
> <
br
> <
div
class
=
"exampleWrapper"
><
br
> <
telerik:RadTabStrip
runat
=
"server"
ID
=
"RadTabStrip1"
Orientation
=
"HorizontalTop"
<br> SelectedIndex="0" MultiPageID="RadMultiPage1" ><
br
> <
Tabs
><
br
> <
telerik:RadTab
Text
=
"Tab 1"
></
telerik:RadTab
><
br
> <
telerik:RadTab
Text
=
"Tab 2"
></
telerik:RadTab
><
br
> </
Tabs
><
br
> </
telerik:RadTabStrip
><
br
> <
telerik:RadMultiPage
runat
=
"server"
ID
=
"RadMultiPage1"
SelectedIndex
=
"0"
Height
=
"218px"
<br> Width="396px" CssClass="multiPage" OnPageViewCreated="RadMultiPage1_PageViewCreated" > <
br
> </
telerik:RadMultiPage
><
br
> </
div
><
br
></
asp:Content
>
TabDash.aspx.cs
using
System;<br>
using
System.Collections.Generic;<br>
using
System.Linq;<br>
using
System.Web;<br>
using
System.Web.UI;<br>
using
System.Web.UI.WebControls;<br>
using
AzimaDLI.Users;<br>
using
AzimaDLI;<br>
using
Telerik.Web.UI;<br><br>
public
partial
class
Desktop_TabDash : BasePage<br>{<br>
public
int
selectedPlantId = 0;<br>
private
string
connString =
string
.Empty;<br>
private
int
histPlantId = 0;<br>
private
User thisUser =
null
;<br><br>
protected
void
Page_Init(
object
sender, EventArgs e)<br> {<br>
if
(Session !=
null
)<br> {<br> connString = Session[
"ConnString"
].ToString();<br> thisUser = ((User)Session[
"User"
]);<br> }<br><br>
if
(!Page.IsPostBack)<br> {<br> LoadPlantsDDL();<br> AddPageView(
"Tab1"
);<br> AddPageView(
"Tab2"
);<br> }<br> }<br><br>
private
void
AddPageView(
string
tabname)<br> {<br> RadPageView pageView =
new
RadPageView();<br> pageView.ID = tabname;<br> RadMultiPage1.PageViews.Add(pageView);<br> }<br><br>
protected
void
Page_Load(
object
sender, EventArgs e)<br> {<br><br> }<br>
protected
void
RadMultiPage1_PageViewCreated(
object
sender, RadMultiPageEventArgs e)<br> {<br>
string
userControlName =
string
.Format(
"~/Desktop/Controls/{0}.ascx"
, e.PageView.ID);<br> Control userCtrl = Page.LoadControl(userControlName);<br> userCtrl.ID = e.PageView.ID +
"_userCtrl"
;<br> e.PageView.Controls.Add(userCtrl);<br> }<br><br>}<br>
Tab1.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Tab1.ascx.cs" Inherits="Desktop_Controls_Tab1" %><
br
><%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %><
br
><
br
><
telerik:RadDockLayout
ID
=
"RadDockLayout1"
runat
=
"server"
Skin
=
"Metro"
<br> OnSaveDockLayout="RadDockLayout1_SaveDockLayout" ><
br
> <
table
><
br
> <
tr
><
br
> <
td
style
=
"vertical-align: top"
> <
br
> <
telerik:RadDockZone
ID
=
"RadDockZone0"
runat
=
"server"
Orientation
=
"Vertical"
Width
=
"350px"
<br> MinHeight="400px" Style="float: left; margin-right: 20px;"><
br
> <
br
> </
telerik:RadDockZone
><
br
> </
td
><
br
> <
td
style
=
"vertical-align: top"
><
br
> <
telerik:RadDockZone
ID
=
"RadDockZone1"
runat
=
"server"
Orientation
=
"Vertical"
Width
=
"350px"
<br> MinHeight="400px" Style="float: left; margin-right: 20px;"><
br
> <
br
> </
telerik:RadDockZone
><
br
> </
td
><
br
> <
td
style
=
"vertical-align: top"
><
br
> <
telerik:RadDockZone
ID
=
"RadDockZone2"
runat
=
"server"
Orientation
=
"Vertical"
Width
=
"350px"
<br> MinHeight="400px"><
br
> <
br
> </
telerik:RadDockZone
><
br
> </
td
><
br
> </
tr
><
br
> </
table
><
br
></
telerik:RadDockLayout
>
Tab1.ascx.cs
using
System;<br>
using
System.Collections.Generic;<br>
using
System.Linq;<br>
using
System.Web;<br>
using
System.Web.UI;<br>
using
System.Web.UI.WebControls;<br>
using
AzimaDLI;<br>
using
AzimaDLI.Users;<br>
using
Telerik.Web.UI;<br>
using
System.Text;<br><br>
public
partial
class
Desktop_Controls_Tab1 : BaseControl<br>{<br>
public
int
selectedPlantId = 0;<br>
private
string
connString =
string
.Empty;<br> User thisUser =
null
;<br><br>
//Store the info about the added docks in the session.<br> private List<DockState> CurrentDockStates<br> {<br> get<br> {<br> List<DockState> _currentDockStates = (List<DockState>)Session["CurrentDockStates"];<br> if (Object.Equals(_currentDockStates, null))<br> {<br> _currentDockStates = new List<DockState>();<br> Session["CurrentDockStates"] = _currentDockStates;<br> }<br> return _currentDockStates;<br> }<br> set<br> {<br> Session["CurrentDockStates"] = value;<br> }<br> }<br><br> protected void Page_Init(object sender, EventArgs e)<br> { <br> if (Session != null)<br> {<br> connString = Session["ConnString"].ToString();<br> thisUser = ((User)Session["User"]);<br> }<br><br><br> if (Page.IsPostBack)<br> {<br> //UpdateLayoutState();<br> //Recreate the docks in order to ensure their proper operation<br> for (int i = 0; i < CurrentDockStates.Count; i++)<br> {<br><br> RadDock dock = CreateRadDockFromState(CurrentDockStates[i]);<br> //We will just add the RadDock control to the RadDockLayout.<br> // You could use any other control for that purpose, just ensure<br> // that it is inside the RadDockLayout control.<br> // The RadDockLayout control will automatically move the RadDock<br> // controls to their corresponding zone in the LoadDockLayout<br> // event (see below).<br> RadDockLayout1.Controls.Add(dock);<br> //We want to save the dock state every time a dock is moved.<br> CreateSaveStateTrigger(dock);<br> //Load the selected widget<br> if (string.IsNullOrEmpty(dock.Tag) || dock.Closed)<br> {<br> return;<br> }<br> Control widget = LoadControl(dock.Tag);<br> dock.ContentContainer.Controls.Add(widget);<br><br> if (CurrentDockStates[i].Closed == true)<br> {<br> dock.Visible = false;<br> }<br> }<br> }<br> else<br> {<br> LoadWidgets();<br> }<br> }<br><br> protected void Page_Load(object sender, EventArgs e)<br> {<br> <br> }<br><br> private void LoadWidgets()<br> {<br> //get the list of widgets that the user has<br> List<WidgetUser> widgetList = WidgetUser.GetWidgetsByPortalUserId(thisUser.PortalUserId, connString);<br> string title = string.Empty;<br> string tag = string.Empty;<br> <br> //loop through the widgetList<br> foreach (WidgetUser item in widgetList)<br> {<br> switch (item.WidgetId)<br> {<br> // customer widget<br> case 1:<br> tag = "~/Desktop/Controls/Widgets/CustomerWidget.ascx";<br> title = Session["CID"].ToString();<br> CreateWidget(item, tag, title); <br> break;<br> case 2:<br> tag = "~/Desktop/Controls/Widgets/WatchListWidget.ascx";<br> CreateWidget(item, tag, item.WidgetName);<br> break;<br> case 3:<br> tag = "~/Desktop/Controls/Widgets/ManualCollectionWidget.ascx";<br> CreateWidget(item, tag, item.WidgetName);<br> break;<br> case 4:<br> tag = "~/Desktop/Controls/Widgets/OnlineCollectionWidget.ascx";<br> CreateWidget(item, tag, item.WidgetName);<br> break;<br> case 5:<br> break;<br> case 6:<br> break;<br> case 7:<br> break;<br> }<br> <br> }<br> }<br><br> <br> private void CreateWidget(WidgetUser item, string tag, string title)<br> {<br> string id = string.Format("Raddock{0}", item.WidgetId);<br> //string title = Session["CID"].ToString();<br> //string tag = "~/Desktop/Controls/Widgets/CustomerWidget.ascx";<br> RadDock dock = CreateRadDock(id, title, 350, item, tag);<br><br> Control widget = LoadControl(dock.Tag);<br> dock.ContentContainer.Controls.Add(widget);<br> <br> AddDocktoZone(item.Column, dock);<br><br> CreateSaveStateTrigger(dock);<br> }<br><br> private void AddDocktoZone(int column, RadDock dock)<br> {<br> if (column == 0)<br> {<br> RadDockZone0.Controls.Add(dock);<br> }<br> else if (column == 1)<br> {<br> RadDockZone1.Controls.Add(dock);<br> }<br> else if (column == 2)<br> {<br> RadDockZone2.Controls.Add(dock);<br> }<br> }<br><br> private void CreateSaveStateTrigger(RadDock dock)<br> {<br> //Ensure that the RadDock control will initiate postback<br> // when its position changes on the client or any of the commands is clicked.<br> //Using the trigger we will "ajaxify" that postback.<br> dock.AutoPostBack = true;<br> dock.CommandsAutoPostBack = true;<br> }<br><br> private RadDock CreateRadDock(string id, string title, int width, WidgetUser item, string tag)<br> {<br> RadDock dock = new RadDock();<br> dock.DockMode = DockMode.Docked;<br> dock.UniqueName = item.WidgetUserId.ToString();<br> dock.ID = string.Format("{0}_{1}", id, dock.UniqueName);<br> dock.Title = title;<br> dock.Index = item.Row;<br> dock.Closed = !item.IsActive;<br> dock.Collapsed = item.Collapsed;<br> dock.Width = Unit.Pixel(width);<br> dock.Tag = tag;<br> dock.EnableAnimation = true;<br> dock.Resizable = true;<br> <br> dock.Commands.Add(new DockCloseCommand());<br> dock.Commands.Add(new DockExpandCollapseCommand());<br><br> return dock;<br> }<br> protected void RadDockLayout1_LoadDockLayout(object sender, DockLayoutEventArgs e)<br> {<br> //Populate the event args with the state information. The RadDockLayout control<br> // will automatically move the docks according that information.<br> foreach (DockState state in CurrentDockStates)<br> {<br> e.Positions[state.UniqueName] = state.DockZoneID;<br> e.Indices[state.UniqueName] = state.Index;<br> }<br> }<br> protected void RadDockLayout1_SaveDockLayout(object sender, DockLayoutEventArgs e)<br> {<br> CurrentDockStates = RadDockLayout1.GetRegisteredDocksState();<br><br> //save the layout to the database<br> for (int i = 0; i < CurrentDockStates.Count; i++)<br> {<br> int index = CurrentDockStates[i].DockZoneID.Length-1;<br> int column = Convert.ToInt32(CurrentDockStates[i].DockZoneID.Substring(index, 1));<br> bool isActive = !CurrentDockStates[i].Closed;<br> bool collapsed = CurrentDockStates[i].Collapsed;<br> int widgetUserId = Convert.ToInt32(CurrentDockStates[i].UniqueName);<br> WidgetUser.Update(widgetUserId, column, CurrentDockStates[i].Index, isActive, collapsed, connString);<br> }<br><br> if (Page.IsPostBack)<br> {<br> //LoadWidgets();<br> }<br> }<br><br> private RadDock CreateRadDockFromState(DockState state)<br> {<br> RadDock dock = new RadDock();<br> dock.DockMode = DockMode.Docked;<br> dock.ID = string.Format("RadDock{0}", state.UniqueName);<br> dock.ApplyState(state);<br> dock.Commands.Add(new DockCloseCommand());<br> dock.Commands.Add(new DockExpandCollapseCommand());<br><br> return dock;<br> }<br>}
Thanks,
NK