This is a migrated thread and some comments may be shown as answers.

SelectAll option in Grid Header along with individual group selection

7 Answers 473 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Shinu
Top achievements
Rank 2
Shinu asked on 14 Aug 2008, 10:30 AM

Requirements

RadControls version

2008.01.0415.20
.NET version

2
Visual Studio version

2005
programming language

C#
browser support

all browsers supported by RadControls


 
PROJECT DESCRIPTION

This project presents how to add a select/deselect all option for selecting all rows in a grouped Grid by means of a CheckBox residing in the Grid header along with individual group selection. To accomplish this task a CheckBox is added to the Grid header inside the ItemCreated event handler. Set the AutoPostBack property of the CheckBox control to true and intercept the action execution
in the CheckChanged event of the CheckBox.

ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 
 
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %> 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
<head runat="server"
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"
        <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
        <br /> 
        <div> 
            <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="20px" /> 
                    </ExpandCollapseColumn> 
                    <GroupByExpressions> 
                      <telerik:GridGroupByExpression> 
                       <GroupByFields> 
                         <telerik:GridGroupByField FieldName="Country" FieldAlias="Country" /> 
                       </GroupByFields> 
                       <SelectFields> 
                         <telerik:GridGroupByField FieldName="Country" FieldAlias="Country" /> 
                       </SelectFields> 
                      </telerik:GridGroupByExpression> 
                    </GroupByExpressions> 
                    <Columns> 
                        <telerik:GridBoundColumn DataField="CustomerID" HeaderText="CustomerID"   DataType="System.Int32" SortExpression="CustomerID" 
                            UniqueName="CustomerID"
                        </telerik:GridBoundColumn> 
                        <telerik:GridBoundColumn DataField="CompanyName" HeaderText="CompanyName" SortExpression="CompanyName" 
                            UniqueName="CompanyName"
                        </telerik:GridBoundColumn> 
                        <telerik:GridBoundColumn DataField="Country" HeaderText="Country" SortExpression="Country" UniqueName="Country"
                        </telerik:GridBoundColumn> 
                    </Columns> 
                    <EditFormSettings> 
                        <PopUpSettings ScrollBars="None" /> 
                    </EditFormSettings> 
                </MasterTableView> 
            </telerik:RadGrid><br /> 
            <br /> 
            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthWindConnectionString %>" 
                SelectCommand="SELECT [CustomerID], [CompanyName], [Country] FROM [ Customers]"></asp:SqlDataSource> 
            &nbsp;</div> 
    </form> 
</body> 
</html> 
 

C#:
using System; 
using System.Data; 
using System.Configuration; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 
using Telerik.Web.UI; 
 
public partial class _Default : System.Web.UI.Page  
    protected void Page_Load(object sender, EventArgs e) 
    { 
 
    } 
    protected void RadGrid1_ItemCreated(object sender, Telerik.Web.UI.GridItemEventArgs e) 
    { 
        if (e.Item is GridHeaderItem) 
        { 
            GridHeaderItem header = (GridHeaderItem)e.Item; 
            CheckBox headerchkbx = new CheckBox(); 
            headerchkbx.ID = "CheckBox2"
            headerchkbx.AutoPostBack = true
            headerchkbx.CheckedChanged += new EventHandler(headerchkbx_CheckedChanged); 
            header["column"].Controls.Add(headerchkbx); 
 
        } 
        if (e.Item is GridGroupHeaderItem) 
        { 
            GridGroupHeaderItem header = (GridGroupHeaderItem)e.Item; 
            CheckBox groupchkbx = new CheckBox(); 
            groupchkbx.ID = "CheckBox1"
            groupchkbx.AutoPostBack = true
            groupchkbx.CheckedChanged += new EventHandler(groupchkbx_CheckedChanged); 
            header.Controls[0].Controls.Add(groupchkbx); 
        } 
          
    } 
    void headerchkbx_CheckedChanged(object sender, EventArgs e) 
    { 
 
        foreach (GridDataItem item in RadGrid1.MasterTableView.Items) 
        { 
            CheckBox headerchkbx = (CheckBox)sender; 
            foreach (GridGroupHeaderItem groupHeader in RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader)) 
            { 
                GridItem[] children = groupHeader.GetChildItems(); 
                CheckBox groupchkbx = (CheckBox)groupHeader.Controls[0].FindControl("CheckBox1"); 
 
                if (headerchkbx.Checked) 
                { 
                    item.Selected = true
                    groupchkbx.Checked = true
                } 
                else 
                { 
                    item.Selected = false
                    groupchkbx.Checked = false
                } 
 
            } 
        } 
    } 
 
    void groupchkbx_CheckedChanged(object sender, EventArgs e) 
    { 
        int chkCount = 0
        foreach (GridGroupHeaderItem groupHeader in RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader)) 
        { 
            GridItem[] children = groupHeader.GetChildItems(); 
 
            CheckBox groupchkbx = (CheckBox)groupHeader.Controls[0].FindControl("CheckBox1"); 
            if ((groupchkbx.Checked)) 
            { 
                chkCount++; 
            } 
            foreach (GridItem child in children) 
            { 
                GridDataItem dataItem = child as GridDataItem; 
                dataItem.Selected = groupchkbx.Checked; 
 
                foreach (GridHeaderItem item in RadGrid1.MasterTableView.GetItems(GridItemType.Header)) 
                { 
                    CheckBox headerchkbx = (CheckBox)item["column"].FindControl("CheckBox2"); 
 
                    if ((!groupchkbx.Checked)) 
                    { 
                        headerchkbx.Checked = false
                    } 
                    if (RadGrid1.MasterTableView.GetItems(GridItemType.GroupHeader).Length == chkCount) 
                    { 
                        headerchkbx.Checked = true
                    } 
 
                } 
            } 
        } 
    } 

7 Answers, 1 is accepted

Sort by
0
Yavor
Telerik team
answered on 19 Aug 2008, 05:47 AM
Hello Shinu,

Thank you for posting this solution, for the community.
Your Telerik points have been updated for your involvement.

Kind regards,
Yavor
the Telerik team

Check out Telerik Trainer, the state of the art learning tool for Telerik products.
0
towpse
Top achievements
Rank 2
answered on 17 Dec 2008, 05:23 PM
I'm wondering if there is a way to get the group header row that owns the check box that is checked; parent group header row of the sender in the checked changed event; or somethign like this instead of iterating through all the rows.
0
towpse
Top achievements
Rank 2
answered on 17 Dec 2008, 05:43 PM
Posted too soon.
What do you think of this?

 

 

CheckBox cb = (CheckBox)sender;

foreach (GridGroupHeaderItem groupHeader in gridNewRequest.MasterTableView.GetItems(GridItemType.GroupHeader))

{

CheckBox groupchkbx = (CheckBox)groupHeader.Controls[0].FindControl("CheckBox1");

if (cb.Equals(groupchkbx))

{

//do check/ uncheck logic and break out of loop.

}

}

Or you can compare the client ID of the sender with the client iD of the check box from the group header row.

 

0
towpse
Top achievements
Rank 2
answered on 18 Dec 2008, 03:33 PM
I can't seem to figure out how to handle some additional UI quirks.
If a user selects all using the grid header check and then deselects one, I need to deselect the header check since all items are no longer selected.
I tried to handle some client events as seen here but the events aren't being hit; at least not by the debugger.
I think if I can get into that event, I should be able to do similar logic in the javascript as you have presented here for the code behind.
0
Roger Caro
Top achievements
Rank 1
answered on 28 May 2010, 05:37 PM
Hi ,
Is it possible to do the same at client side, I'm trying to select  one row per group , to do this I must get the group header item and all the children, but I dont know if there  is support for group header items at client side

Thanks in advance
0
towpse
Top achievements
Rank 2
answered on 07 Jun 2010, 03:07 PM
Caro,
The stuff I posted are client-side examples.

Regards
0
Naeem
Top achievements
Rank 1
answered on 31 Oct 2011, 02:24 PM
Hi towpse,

The stuff you posted are client-side good examples but you did not write the client side code as Caro want.
because i have same issue in rad grid as Caro explain above.
if you have any update for this scenerio then please post a solution

Thanks
Tags
Grid
Asked by
Shinu
Top achievements
Rank 2
Answers by
Yavor
Telerik team
towpse
Top achievements
Rank 2
Roger Caro
Top achievements
Rank 1
Naeem
Top achievements
Rank 1
Share this question
or