or

<telerik:RadGrid ID="RG_SLASummary" runat="server" CellSpacing="0" DataSourceID="SDS_SLASummary" GridLines="None" ShowGroupPanel="True" style="margin:10px" ShowFooter="True" Height="750" OnColumnCreated="RG_SLASummary_ColumnCreated"> <ClientSettings AllowColumnsReorder="True" AllowDragToGroup="True" ReorderColumnsOnClient="True"> <Selecting AllowRowSelect="True" /> <Scrolling AllowScroll="True" UseStaticHeaders="True" /> </ClientSettings> <AlternatingItemStyle Width="100px" /> <GroupHeaderItemStyle Width="100px" /> <GroupingSettings RetainGroupFootersVisibility="true" /> <MasterTableView DataSourceID="SDS_SLASummary" ShowGroupFooter="true"> <GroupByExpressions> <telerik:GridGroupByExpression> <SelectFields> <telerik:GridGroupByField FieldName="Region" FieldAlias="Region" /> <telerik:GridGroupByField FieldName="Status" FieldAlias="Status" /> <telerik:GridGroupByField FieldName="Scheduler" FieldAlias="Scheduler" /> </SelectFields> <GroupByFields> <telerik:GridGroupByField FieldName="Region" /> <telerik:GridGroupByField FieldName="Status" /> <telerik:GridGroupByField FieldName="Scheduler" /> </GroupByFields> </telerik:GridGroupByExpression> </GroupByExpressions> <SortExpressions> <telerik:GridSortExpression FieldName="Region" SortOrder="Ascending" /> <telerik:GridSortExpression FieldName="Status" SortOrder="Ascending" /> <telerik:GridSortExpression FieldName="Scheduler" SortOrder="Ascending" /> </SortExpressions> <CommandItemSettings ExportToPdfText="Export to PDF"></CommandItemSettings> <RowIndicatorColumn Visible="True" FilterControlAltText="Filter RowIndicator column"> <HeaderStyle Width="20px"/> </RowIndicatorColumn> <ExpandCollapseColumn Visible="True" FilterControlAltText="Filter ExpandColumn column"> <HeaderStyle Width="20px"/> <ItemStyle Width="20px" /> </ExpandCollapseColumn> <EditFormSettings> <EditColumn FilterControlAltText="Filter EditCommandColumn column"></EditColumn> </EditFormSettings> </MasterTableView> <EditItemStyle Width="100px" /> <FilterItemStyle Width="100px" /> <ActiveItemStyle Width="100px" /> <ItemStyle Width="100px" /> <SelectedItemStyle Width="100px" /> <FilterMenu EnableImageSprites="False"></FilterMenu></telerik:RadGrid><asp:SqlDataSource ID="SDS_SLASummary" runat="server" ConnectionString="<%$ ConnectionStrings:CWFMO %>" SelectCommand="ESP_SchedulerSLASummary" SelectCommandType="StoredProcedure"> <SelectParameters> <asp:ControlParameter ControlID="RDP_StartDate" DbType="Date" Name="startdate" PropertyName="SelectedDate" /> <asp:ControlParameter ControlID="RDP_EndDate" DbType="Date" Name="enddate" PropertyName="SelectedDate" /> </SelectParameters></asp:SqlDataSource>protected void RG_SLASummary_ColumnCreated(object sender, GridColumnCreatedEventArgs e) { if (e.Column is GridNumericColumn) { GridNumericColumn gridNumericColumn = (GridNumericColumn)e.Column; gridNumericColumn.Aggregate = GridAggregateFunction.Sum; } }


I have gotten items 1-4 working fine - the positioning of dock zones remains stable and predictable between post-backs. However, I am having trouble getting #5 to work reliably. Among the symptoms I see:
Some details: as emphasized by the vast majority of documentation, it is best to create/re-create everything in Page_Init. Thus, I have:
| protected void Page_Init(object sender, EventArgs e) |
| { |
| // Re-create tabs (from persistence store) on the first page visit only |
| if (!Page.IsPostBack) |
| { |
| for (int i = 0; i < CurrentTabCollection.Count; i++) { } |
| } |
| // Re-create page views |
| foreach (KeyValuePair<string, int> pageViewTuple in CurrentPageViewIdCollection) { CreateNewPageView(pageViewTuple.Key, pageViewTuple.Value); } |
| // Re-create dock layouts |
| foreach (KeyValuePair<string, int> dockLayoutTuple in CurrentDockLayoutIdCollection) { CreateNewDockLayout(dockLayoutTuple.Key, dockLayoutTuple.Value); } |
| // Re-create dock zones |
| foreach (KeyValuePair<string, string> dockZoneTuple in CurrentDockZoneIdCollection) { CreateNewRadDockZone(dockZoneTuple.Key, dockZoneTuple.Value); } |
| // Re-create docks |
| for (int i = 0; i < CurrentDockStateCollection.Count; i++) |
| { |
| RadDock dock = CreateRadDockFromState(CurrentDockStateCollection[i]); |
| CreateSaveStateTrigger(dock); |
| } |
| } |
| private void CreateNewDockLayout(string dockLayoutId, int parentTabIndex) |
| { |
| var newDockLayout = new RadDockLayout { ID = dockLayoutId }; |
| newDockLayout.SaveDockLayout += FormSectionsRadDockLayout_SaveDockLayout; // Assign dock layout save handler |
| newDockLayout.LoadDockLayout += FormSectionsRadDockLayout_LoadDockLayout; // Assign dock layout load handler |
| FormSectionsRadMultiPage.PageViews[parentTabIndex].Controls.Add(newDockLayout); |
| } |
| protected void FormSectionsRadDockLayout_SaveDockLayout(object sender, DockLayoutEventArgs e) |
| { |
| // Save the dock state in session |
| CurrentDockStateCollection = ((RadDockLayout)sender).GetRegisteredDocksState(); |
| } |
| protected void FormSectionsRadDockLayout_LoadDockLayout(object sender, DockLayoutEventArgs e) |
| { |
| // Populate event args with state information; the RadDockLayout control will automatically move the docks according to this information |
| foreach (DockState state in CurrentDockStateCollection) |
| { |
| e.Positions[state.UniqueName] = state.DockZoneID; |
| e.Indices[state.UniqueName] = state.Index; |
| } |
| } |