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
If
End
Sub
Private
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
Next
End
Sub
Private
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
Next
End
Sub
Private
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
Next
End
Sub
Thank you for any help!