Appreciate your immediate response and help on the matter.
Below is the aspx code
<td>
<Telerik:RadScriptManager runat="server" ID="RadScriptManager1">
</Telerik:RadScriptManager>
<Telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server">
<Telerik:RadGrid ID="RadGridPatientData" runat="server" AllowMultiRowSelection="true"
CellSpacing="0" Width="945" Height="325" PagerStyle-AlwaysVisible="true" Visible="false"
AllowPaging="True" OnDetailTableDataBind="RadGridPatientData_DetailTableDataBind"
OnNeedDataSource="RadGridPatientData_NeedDataSource" OnItemDataBound="RadGridPatientData_ItemDataBound"
OnItemCreated="RadGridPatientData_ItemCreated" OnPageIndexChanged="RadGridPatientData_PageIndexChanged"
AutoGenerateColumns="true" HeaderStyle-HorizontalAlign="Left">
<PagerStyle Mode="NextPrev" PagerTextFormat="{4} Page {0} of {1}, items {2} to {3} of {5}">
</PagerStyle>
<MasterTableView DataMember="Patient" Width="100%" ClientDataKeyNames="CheckSumId"
DataKeyNames="CheckSumId" AllowMultiColumnSorting="True" AutoGenerateColumns="true"
EnableNoRecordsTemplate="true" ShowHeadersWhenNoRecords="false">
<DetailTables>
<Telerik:GridTableView DataMember="Admission" ClientDataKeyNames="AdmissionId" DataKeyNames="AdmissionId"
Width="100%" AllowPaging="false">
<DetailTables>
<Telerik:GridTableView DataMember="Document" ClientDataKeyNames="Id" DataKeyNames="Id"
Width="99%" AllowPaging="false">
<Columns>
<Telerik:GridTemplateColumn HeaderText="">
<ItemTemplate>
<asp:CheckBox ID="chkSelectDoc" runat="server" AutoPostBack="true" OnCheckedChanged="chkSelectDoc_CheckChanged" />
</ItemTemplate>
</Telerik:GridTemplateColumn>
</Columns>
</Telerik:GridTableView>
</DetailTables>
</Telerik:GridTableView>
</DetailTables>
<NoRecordsTemplate>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<br />
<p style="color: Black">
No document(s) found...</p>
</td>
</tr>
</table>
</NoRecordsTemplate>
</MasterTableView>
<ClientSettings>
<Scrolling AllowScroll="true" ScrollHeight="400px" UseStaticHeaders="true" />
<Selecting AllowRowSelect="true" />
<ClientEvents OnCommand="function(){}" />
</ClientSettings>
</Telerik:RadGrid>
</Telerik:RadAjaxPanel>
</td>
5 Answers, 1 is accepted
You can set the RetainExpandStateOnRebind property of the grid, it gets or sets a value indicating if the Expanded property of both hierarchy and group items will be retained after a call to Rebind() or Rebind() method. Please take a look at the sample code snippet to have the checkbox persist its state as well as the expanded state.
ASPX:
<
telerik:RadAjaxPanel
ID
=
"RadAjaxPanel1"
runat
=
"server"
>
<
telerik:RadGrid
ID
=
"RadGrid"
runat
=
"server"
RetainExpandStateOnRebind
=
"true"
OnDetailTableDataBind
=
"RadGridPatientData_DetailTableDataBind"
OnNeedDataSource
=
"RadGridPatientData_NeedDataSource"
OnItemDataBound
=
"RadGridPatientData_ItemDataBound"
>
<
MasterTableView
DataMember
=
"Country"
DataKeyNames
=
"CountryID"
HierarchyLoadMode
=
"Client"
Name
=
"Country"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"StateID"
Name
=
"State"
HierarchyLoadMode
=
"Client"
RetainExpandStateOnRebind
=
"true"
DataMember
=
"State"
>
<
DetailTables
>
<
telerik:GridTableView
DataKeyNames
=
"StateID,DistrictID"
Name
=
"District"
RetainExpandStateOnRebind
=
"true"
DataMember
=
"District"
>
<
Columns
>
<
telerik:GridTemplateColumn
HeaderText
=
""
>
<
ItemTemplate
>
<
asp:CheckBox
ID
=
"chkSelectDoc"
runat
=
"server"
AutoPostBack
=
"true"
OnCheckedChanged
=
"chkSelectDoc_CheckChanged"
/>
</
ItemTemplate
>
</
telerik:GridTemplateColumn
>
</
Columns
>
</
telerik:GridTableView
>
</
DetailTables
>
</
telerik:GridTableView
>
</
DetailTables
>
</
MasterTableView
>
<
ClientSettings
>
<
Scrolling
AllowScroll
=
"true"
ScrollHeight
=
"400px"
UseStaticHeaders
=
"true"
/>
<
Selecting
AllowRowSelect
=
"true"
/>
</
ClientSettings
>
</
telerik:RadGrid
>
</
telerik:RadAjaxPanel
>
C#:
protected
void
RadGridPatientData_NeedDataSource(
object
sender, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
if
(!e.IsFromDetailTable)
{
RadGrid.DataSource = GetDataTable(
"Select * from Country"
);
}
}
protected
void
RadGridPatientData_DetailTableDataBind(
object
source, Telerik.Web.UI.GridDetailTableDataBindEventArgs e)
{
GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;
switch
(e.DetailTableView.Name)
{
case
"State"
:
{
string
CountryID = dataItem.GetDataKeyValue(
"CountryID"
).ToString();
e.DetailTableView.DataSource = GetDataTable(
"SELECT * FROM State WHERE CountryID = '"
+ CountryID +
"'"
);
break
;
}
case
"District"
:
{
string
StateID = dataItem.GetDataKeyValue(
"StateID"
).ToString();
e.DetailTableView.DataSource = GetDataTable(
"SELECT * FROM District WHERE StateID = '"
+ StateID +
"'"
);
break
;
}
}
}
public
DataTable GetDataTable(
string
query)
{
String ConnString = ConfigurationManager.ConnectionStrings[
"ConnectionString"
].ConnectionString;
SqlConnection conn =
new
SqlConnection(ConnString);
SqlDataAdapter adapter =
new
SqlDataAdapter();
adapter.SelectCommand =
new
SqlCommand(query, conn);
DataTable myDataTable =
new
DataTable();
conn.Open();
try
{
adapter.Fill(myDataTable);
}
finally
{
conn.Close();
}
return
myDataTable;
}
protected
void
chkSelectDoc_CheckChanged(
object
sender, EventArgs e)
{
CheckBox box = (CheckBox)sender;
GridDataItem item = (GridDataItem)box.NamingContainer;
Hashtable target =
null
;
if
(item.OwnerTableView.DataMember ==
"District"
)
{
target = DistrictChecked;
}
if
(box.Checked)
{
target[item[
"DistrictID"
].Text] =
true
;
}
else
{
target[item[
"DistrictID"
].Text] =
null
;
}
}
private
Hashtable DistrictChecked
{
get
{
object
res = ViewState[
"_cc2"
];
if
(res ==
null
)
{
res =
new
Hashtable();
ViewState[
"_cc2"
] = res;
}
return
(Hashtable)res;
}
}
protected
void
RadGridPatientData_ItemDataBound(
object
sender, GridItemEventArgs e)
{
if
(e.Item
is
GridDataItem)
{
GridDataItem item = e.Item
as
GridDataItem;
CheckBox box = (CheckBox)item.FindControl(
"chkSelectDoc"
);
object
isChecked =
null
;
if
(item.OwnerTableView.DataMember ==
"District"
)
{
isChecked = DistrictChecked[item[
"DistrictID"
].Text];
}
if
(isChecked !=
null
)
{
box.Checked = (
bool
)isChecked ==
true
;
}
}
}
Thanks,
Shinu
I set the RetainExpandStateOnRebind property of the grid = true and on the detail tables as well. Still does not work.
<telerik:RadGrid ID="RadGrid1" runat="server" Width="95%" ShowStatusBar="true" AutoGenerateColumns="False" PageSize="700" AllowSorting="True"
AllowMultiRowSelection="False" AllowPaging="False" OnDetailTableDataBind="RadGrid1_DetailTableDataBind" Skin="Office2007"
OnNeedDataSource="RadGrid1_NeedDataSource" OnItemDataBound="RadGrid1_ItemDataBound" OnPreRender="RadGrid1_PreRender" ShowGroupPanel="true"
ShowFooter="false" GridLines="None" GroupingSettings-RetainGroupFootersVisibility="true" RetainExpandStateOnRebind="true">
<PagerStyle Mode="NumericPages"></PagerStyle>
<ClientSettings AllowKeyboardNavigation="true" EnablePostBackOnRowClick="true">
<Selecting AllowRowSelect="true"></Selecting>
</ClientSettings>
<MasterTableView Width="100%" DataKeyNames="CC" AllowMultiColumnSorting="True" ShowHeader="false" HierarchyLoadMode="Conditional">
<Columns>
<telerik:GridBoundColumn DataField="Zone"></telerik:GridBoundColumn>
</Columns>
<DetailTables>
<telerik:GridTableView DataKeyNames="CustomerName" Name="ServiceCC" Width="100%" ShowHeader="false" HierarchyLoadMode="Conditional" RetainExpandStateOnRebind="true">
<DetailTables>
<telerik:GridTableView DataKeyNames="ID" Name="Customers" Width="100%" HierarchyLoadMode="Conditional" RetainExpandStateOnRebind="true">
<DetailTables>
<telerik:GridTableView DataKeyNames="AlertID" Name="Responses" Width="100%" HierarchyLoadMode="Conditional" RetainExpandStateOnRebind="true">
<Columns>
<telerik:GridBoundColumn SortExpression="AlertID" HeaderText="" Visible="false" HeaderButtonType="TextButton"
DataField="AlertID">
</telerik:GridBoundColumn>
<telerik:GridTemplateColumn HeaderText="Response Title" ItemStyle-CssClass="dcol1" HeaderButtonType="TextButton" UniqueName="ResponseTitle">
<ItemTemplate>
<asp:Label ID="lblResponseTitle" runat="server" Text='<%#Eval("Title") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Assigned To" ItemStyle-CssClass="dcol3" HeaderButtonType="TextButton" UniqueName="AssignedTo">
<ItemTemplate>
<asp:Label ID="lblAssignedTo" runat="server" Text='<%#Eval("AssignedTo") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Response Status" ItemStyle-CssClass="dcol4" HeaderButtonType="TextButton" UniqueName="ResponseStatus">
<ItemTemplate>
<asp:Label ID="lblResponseStatus" runat="server" Text='<%#Eval("Status") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Response Created By" ItemStyle-CssClass="dcol5" HeaderButtonType="TextButton" UniqueName="ResponseAuthor">
<ItemTemplate>
<asp:Label ID="lblResponseAuthor" runat="server" Text='<%#Eval("Author") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridBoundColumn SortExpression="Created" HeaderText="Response Created" HeaderButtonType="TextButton" DataField="Created" DataFormatString="{0:M/d/yyyy}"></telerik:GridBoundColumn>
<telerik:GridTemplateColumn HeaderText="ID" HeaderButtonType="TextButton" UniqueName="ID" Visible="true">
<ItemTemplate>
<asp:Label ID="lblID" runat="server" Text='<%#Eval("ID") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn DataField="Comments" ItemStyle-CssClass="dcol7" UniqueName="Comments" HeaderText="Response Comment History">
<ItemTemplate>
<uc1:Comments runat="server" ID="ctrlComments" />
<uc3:CustomEmail runat="server" ID="CustomEmail" />
</ItemTemplate>
</telerik:GridTemplateColumn>
</Columns>
</telerik:GridTableView>
</DetailTables>
<Columns>
<telerik:GridBoundColumn SortExpression="ID" HeaderText="" Visible="false" HeaderButtonType="TextButton" DataField="ID"></telerik:GridBoundColumn>
<telerik:GridTemplateColumn HeaderText="Alert Title" ItemStyle-Width="200px" ItemStyle-CssClass="acol1" HeaderButtonType="TextButton" UniqueName="Title">
<ItemTemplate>
<asp:HyperLink ID="HyperLink1" runat="server" Target="_blank" NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "Url") %>'><%# DataBinder.Eval(Container.DataItem, "Title") %></asp:HyperLink>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Alert Description" ItemStyle-Width="400px" ItemStyle-CssClass="acol2" HeaderButtonType="TextButton" UniqueName="Description">
<ItemTemplate>
<asp:Label ID="lblDescription" runat="server" Text='<%#Eval("Description") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Alert Sub Type" ItemStyle-CssClass="acol3" HeaderButtonType="TextButton" UniqueName="SubType">
<ItemTemplate>
<asp:Label ID="lblSubType" runat="server" Text='<%#Eval("SubType") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Areas of Impact" ItemStyle-CssClass="acol3" HeaderButtonType="TextButton" UniqueName="AlertArea">
<ItemTemplate>
<asp:Label ID="lblAlertArea" runat="server" Text='<%#Eval("AlertArea") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Alert Owner" ItemStyle-CssClass="acol4" HeaderButtonType="TextButton" UniqueName="Owner">
<ItemTemplate>
<asp:Label ID="lblOwner" runat="server" Text='<%#Eval("Owner") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridTemplateColumn HeaderText="Alert Created By" ItemStyle-CssClass="acol5" HeaderButtonType="TextButton" UniqueName="Author">
<ItemTemplate>
<asp:Label ID="lblAuthor" runat="server" Text='<%#Eval("Author") %>'></asp:Label>
</ItemTemplate>
</telerik:GridTemplateColumn>
<telerik:GridBoundColumn SortExpression="Created" HeaderText="Alert Created" HeaderButtonType="TextButton" DataField="Created" DataFormatString="{0:M/d/yyyy}"></telerik:GridBoundColumn>
</Columns>
</telerik:GridTableView>
</DetailTables>
<Columns>
<telerik:GridBoundColumn SortExpression="CustomerName" HeaderText="Customer" HeaderButtonType="TextButton" DataField="CustomerName"></telerik:GridBoundColumn>
<telerik:GridBoundColumn Visible="false" SortExpression="CC" HeaderText="CC" HeaderButtonType="TextButton" DataField="CC"></telerik:GridBoundColumn>
</Columns>
</telerik:GridTableView>
</DetailTables>
<Columns>
<telerik:GridBoundColumn SortExpression="CC" HeaderText="" HeaderButtonType="TextButton" DataField="CC">
</telerik:GridBoundColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
Indeed there is a problem with RetainExpandStateOnRebind property of the grid which is a known one and our developers will fix it as soon as possible. Meanwhile you can use the approach presented in the following code library to persist the expanded/selected state of hierarchy grid on Rebind:
http://www.telerik.com/support/code-library/retain-expanded-selected-state-in-hierarchy-on-rebind
Regards,
Pavlina
Telerik
Could you confirm that the same problem exists with the latest release of ASP.NET AJAX? In case RetainExpandStateOnRebind is not working with version 2017.1.228, please isolate the issue in a runnable project and send it to us. We will debug it locally and in case the bug still exists we we will log it in our bug tracking system and will fix it as soon as possible.
Regards,
Pavlina
Telerik by Progress