I have a grid with grouping by state. At each level I have check boxes (Header, Group, Detail). If the header is checked, all check boxes are checked. If a group check box is checked, all detail check boxes in that group are checked. If a detail check box is unchecked, the group needs to be unchecked and the header needs to be unchecked. I had to write custom code for this because I could find no imbedded controls to do this for me. I used the code example Select All option in Grid Header along with individual group selection as a starting point. My problem is that this is all done server side. I would like it to be client side. I found client side examples that let me select all, but none that did the unselecting when a lower item was unchecked. I have made several attempts at writing the client side code, but have failed.
I am using telerik version 2012.3.1016.4, Visual Basic .Net Framework 4. This needs to work in all (most common) browsers.
My aspx page
My vb.net code
Thank you for any help!
I am using telerik version 2012.3.1016.4, Visual Basic .Net Framework 4. This needs to work in all (most common) browsers.
My aspx page
<form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server" /> <div> <br /> <telerik:RadGrid ID="RadGrid1" runat="server" AllowMultiRowSelection="true" DataSourceID="SqlDataSource1" GridLines="None" AutoGenerateColumns="False" OnItemCreated="RadGrid1_ItemCreated" Skin="Hay"> <MasterTableView DataSourceID="SqlDataSource1"> <RowIndicatorColumn Visible="False"> <HeaderStyle Width="20px" /> </RowIndicatorColumn> <ExpandCollapseColumn Resizable="False" Visible="False"> <HeaderStyle Width="40px" /> </ExpandCollapseColumn> <GroupByExpressions> <telerik:GridGroupByExpression> <GroupByFields> <telerik:GridGroupByField FieldName="State" FieldAlias="State" /> </GroupByFields> <SelectFields> <telerik:GridGroupByField FieldName="State" FieldAlias="State" /> </SelectFields> </telerik:GridGroupByExpression> </GroupByExpressions> <Columns> <telerik:GridBoundColumn SortExpression="LastName" HeaderText="Last Name" HeaderButtonType="TextButton" DataField="LastName" UniqueName="LastName" ItemStyle-Width="40px" > </telerik:GridBoundColumn> <telerik:GridBoundColumn SortExpression="FirstName" HeaderText="First Name" HeaderButtonType="TextButton" DataField="FirstName" UniqueName="FirstName"> </telerik:GridBoundColumn> </Columns> <EditFormSettings> <PopUpSettings ScrollBars="None" /> </EditFormSettings> </MasterTableView> </telerik:RadGrid><br /> <br /> <asp:SqlDataSource ID="SqlDataSource1" ConnectionString="<%$ ConnectionStrings:ConnString %>" ProviderName="System.Data.SqlClient" SelectCommand="select * from TAZTestData order by State, LastName" runat="server"> </asp:SqlDataSource> </div> </form> My vb.net code
Protected Sub RadGrid1_ItemCreated(sender As Object, e As Telerik.Web.UI.GridItemEventArgs) If TypeOf e.Item Is GridHeaderItem Then Dim header As GridHeaderItem = DirectCast(e.Item, GridHeaderItem) Dim headerchkbx As New CheckBox() headerchkbx.ID = "CheckBox1" headerchkbx.AutoPostBack = True AddHandler headerchkbx.CheckedChanged, AddressOf headerchkbx_CheckedChanged header("column").Controls.Add(headerchkbx) End If If TypeOf e.Item Is GridGroupHeaderItem Then Dim header As GridGroupHeaderItem = DirectCast(e.Item, GridGroupHeaderItem) Dim groupchkbx As New CheckBox() groupchkbx.ID = "CheckBox2" groupchkbx.AutoPostBack = True AddHandler groupchkbx.CheckedChanged, AddressOf groupchkbx_CheckedChanged header.Controls(0).Controls.Add(groupchkbx) End If If TypeOf e.Item Is GridDataItem Then Dim header As GridDataItem = DirectCast(e.Item, GridDataItem) Dim detailchkbx As New CheckBox() detailchkbx.ID = "CheckBox3" detailchkbx.AutoPostBack = True AddHandler detailchkbx.CheckedChanged, AddressOf detailchkbx_CheckedChanged header.Controls(0).Controls.Add(detailchkbx) End IfEnd SubPrivate Sub headerchkbx_CheckedChanged(sender As Object, e As EventArgs) Dim headerchkbx As CheckBox = DirectCast(sender, CheckBox) For Each groupHeader As GridGroupHeaderItem In RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader) Dim children As GridItem() = groupHeader.GetChildItems() Dim groupchkbx As CheckBox = DirectCast(groupHeader.Controls(0).FindControl("CheckBox2"), CheckBox) For Each child As GridItem In children Dim detailchkbx As CheckBox = DirectCast(child.Controls(0).FindControl("CheckBox3"), CheckBox) detailchkbx.Checked = headerchkbx.Checked Next ' If headerchkbx.Checked Then groupchkbx.Checked = headerchkbx.Checked 'Else 'item.Selected = False 'groupchkbx.Checked = False 'End If Next For Each item As GridHeaderItem In RadGrid1.MasterTableView.GetItems(GridItemType.Header) item.Selected = headerchkbx.Checked NextEnd SubPrivate Sub groupchkbx_CheckedChanged(sender As Object, e As EventArgs) Dim chkCount As Integer = 0 For Each groupHeader As GridGroupHeaderItem In RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader) Dim children As GridItem() = groupHeader.GetChildItems() Dim groupchkbx As CheckBox = DirectCast(groupHeader.Controls(0).FindControl("CheckBox2"), CheckBox) If (groupchkbx.Checked) Then chkCount += 1 End If For Each child As GridItem In children Dim detailchkbx As CheckBox = DirectCast(child.Controls(0).FindControl("CheckBox3"), CheckBox) detailchkbx.Checked = groupchkbx.Checked 'Dim dataItem As GridDataItem = TryCast(child, GridDataItem) 'dataItem.Selected = groupchkbx.Checked For Each item As GridHeaderItem In RadGrid1.MasterTableView.GetItems(GridItemType.Header) Dim headerchkbx As CheckBox = DirectCast(item("column").FindControl("CheckBox1"), CheckBox) If (Not groupchkbx.Checked) Then headerchkbx.Checked = False End If If RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader).Length = chkCount Then headerchkbx.Checked = True End If Next Next NextEnd SubPrivate Sub detailchkbx_CheckedChanged(sender As Object, e As EventArgs) Dim totalCount As Integer = 0 Dim groupCount As Integer = 0 Dim totalChkCount As Integer = 0 Dim groupChkCount As Integer = 0 'Loop through all groups For Each groupHeader As GridGroupHeaderItem In RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader) Dim groupchkbx As CheckBox = DirectCast(groupHeader.Controls(0).FindControl("CheckBox2"), CheckBox) Dim grpChildren As GridItem() = groupHeader.GetChildItems() For Each child As GridItem In grpChildren 'Count total number of checkboxes in whole grid and in each group totalCount += 1 groupCount += 1 Dim detailchkbx As CheckBox = DirectCast(child.Controls(0).FindControl("CheckBox3"), CheckBox) 'Count number of checkboxes that are checked in whole grid and in each group If (detailchkbx.Checked) Then totalChkCount += 1 groupChkCount += 1 End If Next 'Check the group check box if all the children are checked If groupCount = groupChkCount Then groupchkbx.Checked = True Else groupchkbx.Checked = False End If groupCount = 0 groupChkCount = 0 Next For Each hdr As GridHeaderItem In RadGrid1.MasterTableView.GetItems(GridItemType.Header) Dim headerchkbx As CheckBox = DirectCast(hdr("column").FindControl("CheckBox1"), CheckBox) If totalCount = totalChkCount Then headerchkbx.Checked = True Else headerchkbx.Checked = False End If NextEnd SubThank you for any help!

