Click here to Skip to main content
12,635,421 members (23,957 online)
Click here to Skip to main content
Add your own
alternative version


94 bookmarked

Adding a CheckBox Column to a DataGrid

, 29 May 2003
Rate this:
Please Sign up or sign in to vote.
Shows how to add a checkbox column to a datagrid
<!-- Article image -->

Sample Image - DataGridCheckBoxCol.gif

<!-- Add the rest of your HTML here -->


A recent project I was working on required a user to select a number of options from a list. Instead of using a mulit-select list box which didn't really fit into the design of the site we decided to make a reusable control that would add a checkbox to a DataGrid.

Using the code

To use the checkbox column in a DataGrid it's simply a matter of registering the tag at the top of the page:

<%@ Register TagPrefix="chkbox" Namespace="DataGridControls" 
    Assembly="DataGridCheckbox" %>

Then to add the checkbox column to the DataGrid:

<asp:DataGrid ID="dgTestGrid" Runat="server" AutoGenerateColumns=True 
    border="0" width="50%">

The CheckBoxColumn class is pretty straight forward:

using System;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace DataGridControls
 /// <span class="code-SummaryComment"><summary></span>
 /// CheckBoxColumn Derives from DataGrid Column
 /// <span class="code-SummaryComment"></summary></span>
 public class CheckBoxColumn : DataGridColumn
    public CheckBoxColumn(): base()
      public override void InitializeCell(TableCell cell, 
        int columnIndex, ListItemType itemType) 
           //let the base class initialize the cell
           base.InitializeCell(cell, columnIndex, itemType);

           //we don't want to add a checkbox to the header.
           if(    itemType == ListItemType.EditItem || 
            itemType == ListItemType.Item || 
            itemType == ListItemType.AlternatingItem || 
            itemType == ListItemType.SelectedItem){

                HtmlInputCheckBox checkbox = new HtmlInputCheckBox();
                //assign an ID that we can use to find the control later
                checkbox.ID = "checkboxCol";
      public Int32[] SelectedIndexes 
                ArrayList selectedIndexList = new ArrayList();
                //iterate each DataGridItem and find our checkbox
                foreach( DataGridItem item in this.Owner.Items ) 
                     HtmlInputCheckBox chkBox = 
                        (HtmlInputCheckBox) item.FindControl("checkboxCol");
                     //If it's selected then add it to our ArrayList
                     if ( chkBox != null && chkBox.Checked )  
                          selectedIndexList.Add( item.ItemIndex );
                return (Int32[])selectedIndexList.ToArray(typeof( 
                        System.Int32 ) );
      public object[] SelectedDataKeys 
                //Just iterate each of the selectedindexes and 
                //match it up to the datakey field
                ArrayList dataKeyList = new ArrayList();
                //make sure the datakeys have some values
                if(this.Owner.DataKeys.Count > 0)
                     foreach( Int32 selectedIndex in SelectedIndexes ) 
                          object DataKey = 
                return (object[])dataKeyList.ToArray(typeof( object ) );

The class exposes 2 properties: 

  • SelectedDataKeys: Returns an ArrayList with the DataKey values
  • SelectedIndexes: Returns an Int32[] with the selectedIndex values

To find out which checkbox has been selected:

//On our button's Onclick

protected void btnSubmit_Click(object sender, EventArgs e)
   //Get our checkboxcolumn, we know it's position is 0
   CheckBoxColumn chkbox = (CheckBoxColumn) dgTestGrid.Columns[0];
   foreach(object datakeyfield in chkbox.SelectedDataKeys)
    Response.Write(datakeyfield.ToString() + "<br>");

That's pretty much it, the DataKeyField of the DataGrid can be of any type. The sample I've included binds a DataTable to the DataGrid, you can change the DataKeyField from "ID" (int) to "Name" (string) to see the code working with different types.


This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


About the Author

Web Developer
Australia Australia
I've been programming for a few years now. I blog regularly at httpcode.

You may also be interested in...

Comments and Discussions

GeneralPretty handy Pin
JBress8-Jun-11 4:56
memberJBress8-Jun-11 4:56 
GeneralC#Net2003 - Window Application Add CheckBox In DataGrid Pin
TeeLeong4-Nov-09 9:56
memberTeeLeong4-Nov-09 9:56 
Generalbrowse button Pin
Member 444235011-Apr-08 2:30
memberMember 444235011-Apr-08 2:30 
GeneralI can't load the project Pin
GFJ16-Jul-07 6:12
memberGFJ16-Jul-07 6:12 
GeneralThe same but for VB.NET Pin
TheSilentman14-Feb-07 4:47
memberTheSilentman14-Feb-07 4:47 
QuestionWhat will happen if more one page data will it work properly Pin
Member #75098521-Jan-07 22:06
memberMember #75098521-Jan-07 22:06 
QuestionWhat about TemplateColumn Pin
SenFo9-Jan-06 9:35
memberSenFo9-Jan-06 9:35 
AnswerRe: What about TemplateColumn Pin
jeganji14-Dec-06 19:45
memberjeganji14-Dec-06 19:45 
GeneralRe: What about TemplateColumn Pin
erax dan13-Aug-08 23:17
membererax dan13-Aug-08 23:17 
GeneralModified Code for Server-Side Select-DeselectAll Pin
sikemullivan15-Oct-05 10:11
membersikemullivan15-Oct-05 10:11 
GeneralRe: Modified Code for Server-Side Select-DeselectAll Pin
lowlandr30-Dec-05 6:01
memberlowlandr30-Dec-05 6:01 
GeneralRe: Modified Code for Server-Side Select-DeselectAll Pin
SilverSabre18-Nov-08 5:41
memberSilverSabre18-Nov-08 5:41 
GeneralError with Assembly Pin
sikemullivan12-Oct-05 11:56
membersikemullivan12-Oct-05 11:56 
General2 CHECKBOXCOLUMN in a Datagrid Pin
Olog-hai29-Apr-05 11:08
memberOlog-hai29-Apr-05 11:08 
GeneralRe: 2 CHECKBOXCOLUMN in a Datagrid Pin
SilverSabre18-Nov-08 1:18
memberSilverSabre18-Nov-08 1:18 
GeneralData type undefined Pin
Dustin Boston12-Jan-05 11:14
memberDustin Boston12-Jan-05 11:14 
GeneralCheckbox in datagrid Pin
fredo_lefran4-Jan-05 0:35
memberfredo_lefran4-Jan-05 0:35 
Questioncheckbox initial value? Pin
J_T_C29-Jun-04 12:04
memberJ_T_C29-Jun-04 12:04 
AnswerRe: checkbox initial value? Pin
Sukim15-Aug-04 0:30
memberSukim15-Aug-04 0:30 
GeneralRe: checkbox initial value? Pin
Sukim15-Aug-04 2:15
memberSukim15-Aug-04 2:15 
Generalthe example will show error in 2003 Pin
hardyhe9-May-04 18:01
memberhardyhe9-May-04 18:01 
GeneralRe: the example will show error in 2003 Pin
jsnook18-Jun-04 9:12
memberjsnook18-Jun-04 9:12 
GeneralSelect/Deselect All Pin
peterwi19-Dec-03 13:43
memberpeterwi19-Dec-03 13:43 
Generala bug .... Pin
topcn22-Jun-03 9:07
membertopcn22-Jun-03 9:07 
GeneralRe: a bug .... Pin
jsnook18-Jun-04 8:03
memberjsnook18-Jun-04 8:03 
GeneralRe: a bug .... Pin
Canz3-Jan-05 23:18
memberCanz3-Jan-05 23:18 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.161208.2 | Last Updated 30 May 2003
Article Copyright 2003 by Dan_P
Everything else Copyright © CodeProject, 1999-2016
Layout: fixed | fluid