Click here to Skip to main content
15,887,746 members
Articles / Web Development / ASP.NET
Article

DataGrid CheckBox Select Multiple Rows Column

Rate me:
Please Sign up or sign in to vote.
4.80/5 (31 votes)
11 Apr 2005CPOL2 min read 254.5K   3.1K   85   46
Allow users to select multiple records from your DataGrid. "CheckAll / UnCheck All" functionality on client side.

Sample Image - dgcheckboxcolumn.jpg

Introduction

Multiple row selection in a web DataGrid is a usual requirement and the common and most elegant way to implement that is definitely using CheckBox(s). A checkbox column must of course be accompanied with a CheckAll / UnCheckAll functionality.

Outline

After searching this site, I was surprised not to find anything that suited this requirement completely. I did however find what I was looking for in different segments (acknowledged below). I decided to compile all what I needed in a reusable class / library (for reference). Following is the functionality provided:

  • Checkbox column for DataGrid.
  • CheckAll, UnCheckAll checkbox in the header without PostBack to the server.
  • Static method to register client side JavaScripts.

How to use

Download the supplied .cs file and add to your project. (If your project is in another language, create a new library project and add the supplied .cs to that project, compile the library, and attach the resulting .dll as a reference to your project).

Register a TagPrefix in your aspx page for the new column as follows:

ASP.NET
<%@ Register TagPrefix="GridSelectCheckBox" Namespace="solCommon.Web.UI.DataGrid" 
                                                   Assembly="ProjectAssembly" %>

This is, of course, a snippet from my code, you can register any TagPrefix in your page. Should you change the namespace in the supplied .cs file, replace the Namespace attribute accordingly. The Assembly attribute must be your project/library assembly.

The next logical step is to include the column in your DataGrid. You may include the column at any location. Following adds the column at location 0, i.e. the first column:

ASP.NET
<asp:datagrid ...>
...
    <Columns>
    <GridSelectCheckBox:DGCheckBoxColumn />
    ...
    </Columns>
...
</asp:datagrid>

Lastly, we use the exposed static method of DGCheckBoxColumn class to register client side JavaScripts for the CheckAll/UncheckAll feature. In the Page_Load method of your aspx page, add the following line:

C#
DGCheckBoxColumn.RegisterClientCheckEvents(this,"Form1");

You should replace "Form1" with the name of the form in which your DataGrid resides.

Your DataGrid is now ready.

You can get the selected indexes or the selected DataKeys by calling one of the exposed properties, i.e. DGCheckBoxColumn.SelectedIndexes and DGCheckBoxColumn.SelectedDataKeys. Let's say, in your button click event handler you try the following:

C#
// since we know that our column in the grid is the first one ...
DGCheckBoxColumn dgchkbxCol = (DGCheckBoxColumn)myGrid.Columns[0];

// iterate through the selection
foreach (int i in dgchkbxCol.SelectedIndexes)
{
   // do something ...
}

Acknowledgements

I must thank the following two articles as I have used much of their contents:

Usage and Copyrights

You may freely use/modify the supplied file for your own usage, as long as you retain the acknowledgements presented above. Please don't forget to rate this article. Thanks and good luck.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
Saudi Arabia Saudi Arabia
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Questionhow to select through checkboxes? Pin
Member 466308727-Apr-08 20:57
Member 466308727-Apr-08 20:57 
QuestionHow Select a row in Data Grid Pin
Murtuza Husain Miyan Patel16-Mar-07 2:14
professionalMurtuza Husain Miyan Patel16-Mar-07 2:14 
Questionhow can i tell what my project/library assembly is Pin
insignificant15-Mar-07 6:30
insignificant15-Mar-07 6:30 
GeneralIt is not a good idea Pin
Member 2738631-Jan-07 21:56
Member 2738631-Jan-07 21:56 
QuestionSpecified cast is not valid Pin
krimsondon19-Dec-06 9:49
krimsondon19-Dec-06 9:49 
QuestionHow to fetch info abt checked rows Pin
montysehra19-Nov-06 23:35
montysehra19-Nov-06 23:35 
QuestionCheck All button Does not work Pin
Stephen Noronha20-Oct-06 8:55
Stephen Noronha20-Oct-06 8:55 
AnswerRe: Check All button Does not work Pin
phantomvie29-Nov-07 23:21
phantomvie29-Nov-07 23:21 
GeneralRe: Check All button Does not work Pin
Member 279619825-Jan-10 1:54
Member 279619825-Jan-10 1:54 
Generalmy problem:my datasource is a arrayList [modified] Pin
rengdongzwf11-Jun-06 20:28
rengdongzwf11-Jun-06 20:28 
GeneralPaging Problem Pin
mshariq10-Jun-06 18:07
mshariq10-Jun-06 18:07 
GeneralTo check the checkbox Pin
huguesgauthier17-May-06 8:43
huguesgauthier17-May-06 8:43 
GeneralRe: To check the checkbox Pin
Ted Husted30-May-06 8:50
Ted Husted30-May-06 8:50 
GeneralRe: To check the checkbox Pin
Donald Bittenbender17-Dec-08 11:23
Donald Bittenbender17-Dec-08 11:23 
Generalcollecting information from a datagrid Pin
JustmeNick30-Apr-06 7:15
JustmeNick30-Apr-06 7:15 
GeneralCheck All isn't working Pin
BSegE12-Mar-06 5:54
BSegE12-Mar-06 5:54 
NewsProjectAssembly Cannot Load Pin
torome10-Mar-06 16:51
torome10-Mar-06 16:51 
GeneralAdding data Pin
MiniDawg25-Jan-06 5:45
MiniDawg25-Jan-06 5:45 
Guys,
Got it to work!


Trick was to read out of an arraylist, not an array:
Something like this:
ArrayList cd = new ArrayList();
//iterate through logic and do add value x
cd.Add (new AddValue(x));
DGCheckBox.DataSource = cd;
DGCheckBox.DataBind();
DGCheckBoxColumn.RegisterClientCheckEvents(this,"Form1");

You will have to define the AddValues though through a class (which I found under Tomohiro's profile: http://www.codeproject.com/cs/miscctrl/valuemembersample.asp)

Adjusted for the one column display:
public class AddValue
{
private string m_Display;
//private string m_Value;
//public AddValue(string Display, string Value)
public AddValue(string SelectAll)
{
m_Display = SelectAll;
}
public string SelectAll
{
get{return m_Display;}
}
//public string Value
//{
// get{return m_Value;}
//}
}


Thank you to all of you!!!





NOTE:
I did get data displayed.... somewhat. I guess I need to edit the data I desire to display in the Page_Load as I have been prior to trying to appy this code. However, my data is caught within a jagged array and I seem to not get the datasource assignment right. Here is what I use:

Format of jagged array:
string[][] cbxJaggedArray = new string[x][];
//where x is a dynamically derived count
//After populating the array:
DGCheckBox.DataSource = (cbxJaggedArray);
DGCheckBox.DataBind();
//this gets me the first element of the array with position 1 and 2 displayed as separate checkbox items.
DGCheckBox.DataSource = (cbxJaggedArray[0]);
DGCheckBox.DataBind();
//does the same
//and...
DGCheckBox.DataSource = (cbxJaggedArray[0][0]);
DGCheckBox.DataBind();
//...gets me the same as when I try to do a single-dim array and ref that one like: cbxJaggedArray[i]--> the result is an iteration through one character as a new checkbox at a time!!!

ok, confused enough?



DGCheckBox.DataBind();

Ok, this might sound retarded, but I am new to this....
Where and how do I add data (I guess rows) to the data grid? I tried to put it into the "public override void InitializeCell", but that didn't work.
Does it go into the "public DGCheckBoxColumn(): base()"?
Could you please give me a hint? Cry | :((

Currently I have the data I would like to display on the grid in an array containing an id and a text/description for display. The array is currently in another class of my project which is a "public class xxx: System.Web.UI.Page". Can I have these communicate with each other?

-- modified at 15:13 Wednesday 25th January, 2006
GeneraldgchkbxCol.SelectedIndexes return empty Pin
layoro5-Jan-06 16:15
layoro5-Jan-06 16:15 
GeneralRe: dgchkbxCol.SelectedIndexes return empty Pin
MiniDawg26-Jan-06 7:14
MiniDawg26-Jan-06 7:14 
JokeRe: dgchkbxCol.SelectedIndexes return empty Pin
layoro26-Jan-06 14:25
layoro26-Jan-06 14:25 
JokeRe: dgchkbxCol.SelectedIndexes return empty Pin
MiniDawg27-Jan-06 2:50
MiniDawg27-Jan-06 2:50 
GeneralPage Errors...About Length Pin
ekasal1-Dec-05 20:48
ekasal1-Dec-05 20:48 
GeneralClick the header checkbox that is not select all checkbox Pin
Vincent Tan E H24-Aug-05 0:19
Vincent Tan E H24-Aug-05 0:19 
GeneralRe: Click the header checkbox that is not select all checkbox Pin
erikwi26-Nov-05 1:08
erikwi26-Nov-05 1:08 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.