Referencing CheckBoxes in GridView, Repeater and DataList controls

4.13 (30 votes)

If you want to find which CheckBoxes were selected in a multiple record DataBound control, the way that you you do it depends on the type of control you use. These examples demonstrate a CheckBox control being added to a GridView, Repeater and a DataList. For simplicity, I have placed all three controls on the same page, and used the Access version of theNorthwind database. One AccessDataSource control is used to bind the results of "SELECT [CategoryID], [Description], [CategoryName] FROM [Categories]" to all three controls.

<asp:Literal ID="RptLiteral" runat="server" /><br />
<asp:Literal ID="GrdLiteral" runat="server" /><br />
<asp:Literal ID="DlLiteral" runat="server" /><br />

<asp:Repeater ID="Repeater1" runat="server" DataSourceID="AccessDataSource1">
      <asp:CheckBox ID="CategoryID" runat="server" Text='<%# Eval("CategoryID") %>' />
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CategoryID"
    <asp:TemplateField HeaderText="CategoryID" InsertVisible="False">
         <asp:CheckBox ID="CategoryID" runat="server" Text='<%# Eval("CategoryID") %>' />
    <asp:BoundField DataField="Description" HeaderText="Description" />
      <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" />

<asp:DataList ID="DataList1" runat="server" DataKeyField="CategoryID" 
       <asp:CheckBox ID="CategoryID" runat="server" Text='<%# Eval("CategoryID") %>' /><br />
       <asp:Label ID="DescriptionLabel" runat="server" Text='<%# Eval("Description") %>' />
	   <br />
       <asp:Label ID="CategoryNameLabel" runat="server" Text='<%# Eval("CategoryName") %>' />
	   <br /><br />

<asp:Button ID="Button1" runat="server" Text="Button" />
<asp:AccessDataSource ID="AccessDataSource1" runat="server" DataFile="~/App_Data/Northwind.mdb"
  SelectCommand="SELECT [CategoryID], [Description], [CategoryName] FROM [Categories]" />


The GridView contains a collection of GridViewRow objects. Once you reference the collection, and iterate through it, you can use the FindControl method of the GridViewRow to access controls:

string Grd = "GridView Items Checked:<br />";
foreach (GridViewRow gvr in GridView1.Rows)
CheckBox chk = (CheckBox)gvr.FindControl("CategoryID");
if (chk.Checked)
    Grd += (chk.Text + "<br />");
GrdLiteral.Text = Grd;
Dim Grd As String = "GridView Items Checked:<br />"
For Each gvr As GridViewRow In GridView1.Rows
  Dim chk As CheckBox = DirectCast(gvr.FindControl("CategoryID"), CheckBox)
  If chk.Checked Then
    Grd += (chk.Text + "<br />")
  End If
GrdLiteral.Text = Grd


The Repeater has an Items collection. In this example, the Count property of the Items collection is retrieved and used with a for.. next loop [C#] While... End While [VB] to iterate the collection. The FindControl method of each Item is used to reference the CheckBox again:

string Rpt = "Repeater Items Checked:<br />";
for (int i = 0; i < Repeater1.Items.Count; i++)
  CheckBox chk = (CheckBox)Repeater1.Items[i].FindControl("CategoryID");
  if (chk.Checked)
    Rpt+=(chk.Text + "<br />");
RptLiteral.Text = Rpt;
Dim Rpt As String = "Repeater Items Checked:<br />"
Dim i As Integer = 0
While i < Repeater1.Items.Count
  Dim chk As CheckBox = DirectCast(Repeater1.Items(i).FindControl("CategoryID"), CheckBox)
  If chk.Checked Then
    Rpt += (chk.Text + "<br />")
  End If
  i += 1
End While
RptLiteral.Text = Rpt


The DataList also has an Items collection, but this time, foreach [C#] For Each [VB] is used to iterate the collection. for... next could just as easily be used as in the Repeater example:

string Dl = "Datalist Items Checked:<br />";
foreach (DataListItem dli in DataList1.Items)
  CheckBox chk = (CheckBox)dli.FindControl("CategoryID");
  if (chk.Checked)
    Dl += (chk.Text + "<br />");
DlLiteral.Text = Dl;
Dim Dl As String = "Datalist Items Checked:<br />"
For Each dli As DataListItem In DataList1.Items
  Dim chk As CheckBox = DirectCast(dli.FindControl("CategoryID"), CheckBox)
  If chk.Checked Then
    Dl += (chk.Text + "<br />")
  End If
DlLiteral.Text = Dl

Date Posted:
Last Updated:
Posted by:
Total Views to date: 72236


- Mohan

i am facing problem in retrieving the status of checkboxes
every time they showing as cheeck = false
here my code
<asp:CheckBox ID="HeaderLevelCheckBox" runat="server" onclick="javascript:HeaderClick(this);" />
<asp:CheckBox ID="CheckBox1" runat="server" Text='<%# Eval("APPROVAL_STATUS") %>' />
<asp:BoundField DataField="EMP_ID" HeaderText="EmpID" ReadOnly="True" Visible="False" />
<asp:BoundField DataField="EMP_NAME" HeaderText="Employee Name" ReadOnly="True" />

For Each gvRow As GridViewRow In GV.Rows
If gvRow.RowType = DataControlRowType.DataRow Then
Dim chkItem As CheckBox = DirectCast(gvRow.FindControl("CheckBox1"), CheckBox)
If chkItem.Checked = True Then
' do something
End If
End If

any help would highly be appreciated

- Ram

Greate post..
FindControl method not working for html controls(in my case it is, select control) in Datalist. I have placed Htmlselect control in one colunm but i unable to find it in foreach loop datalistitems.

- Tsubasa

This is an excellent example that I am also using in one of my programs for selecting and inserting records. I have yet to develop the code for inserting after selecting, but that should not be to hard for me.

Excellent work!


- Mark

thanks! it's realy cool .

- somasekhar akiri

nice article

- mrityunjay

it's very nice and really helpful.

Recent Comments

Rajasekar 24/11/2015 12:27
In response to Import Data From Excel to Access with ASP.NET
While use this code i'm facing on error: "Unrecognized Database format C:\mydabase.accdb" can any...

Parmod 24/11/2015 07:28
In response to ASP.NET 5 Project Basics
For a new learner (Fresher) in ASP.NET there is a issue Fresher have to learn two types of , old...

Robert 22/11/2015 21:35
In response to ASP.NET 5 By Numbers
I have to agree fully with Paul, this does sound like an entire mis-mash of technologies. Sort of in...

Christian 21/11/2015 15:46
In response to MVC 5 with EF 6 in Visual Basic - Creating an Entity Framework Data Model
Many thanks Mike to introduce me in the EF6 Code First way of thinking. Exactly what I need for my...

ax plains 20/11/2015 16:29
In response to Examining the Details and Delete Methods
Hello, really great tutorial for a beginner like me! Is it possible to have an explanation on how a...

Abdul Latif 20/11/2015 14:42
In response to Reading Excel Files Without Saving To Disk In ASP.NET
Could anyone please help me, I am getting : "OfficeOpenXml.ExcelPackage" does not contain a for...

Thomas 20/11/2015 09:44
In response to Cheat Sheet - .NET Framework Exceptions
Hey Mike, nice list. I've also checked your article on how you created the list, but is there any to...

Pramod Gagare 19/11/2015 11:18
In response to Date Formatting in C#

Robby 19/11/2015 08:16
In response to WebMatrix - Database Helpers for IN Clauses
Would it also be possible to override the default query and querysingle methods to include the azure...

Menja 18/11/2015 08:28
In response to Sessions and Shopping Carts
Thank you for a perfect description and that you show all the screenshot at the same time!!! It a...