Referencing CheckBoxes in GridView, Repeater and DataList controls
[aspx]
<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">
<ItemTemplate>
<div>
<asp:CheckBox ID="CategoryID" runat="server" Text='<%# Eval("CategoryID") %>' />
</div>
</ItemTemplate>
</asp:Repeater>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="CategoryID"
DataSourceID="AccessDataSource1">
<Columns>
<asp:TemplateField HeaderText="CategoryID" InsertVisible="False">
<ItemTemplate>
<asp:CheckBox ID="CategoryID" runat="server" Text='<%# Eval("CategoryID") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Description" HeaderText="Description" />
<asp:BoundField DataField="CategoryName" HeaderText="CategoryName" />
</Columns>
</asp:GridView>
<asp:DataList ID="DataList1" runat="server" DataKeyField="CategoryID"
DataSourceID="AccessDataSource1">
<ItemTemplate>
CategoryID:
<asp:CheckBox ID="CategoryID" runat="server" Text='<%# Eval("CategoryID") %>' /><br />
Description:
<asp:Label ID="DescriptionLabel" runat="server" Text='<%# Eval("Description") %>' />
<br />
CategoryName:
<asp:Label ID="CategoryNameLabel" runat="server" Text='<%# Eval("CategoryName") %>' />
<br /><br />
</ItemTemplate>
</asp:DataList></div>
<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]" />
GridView
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:
[C#]
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;
[VB]
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
Next
GrdLiteral.Text = Grd
Repeater
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:
[C#]
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;
[VB]
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
DataList
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:
[C#]
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;
[VB]
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
Next
DlLiteral.Text = Dl
Currently rated 3.90 by 10 people
Rate Now!
Date Posted:
30 August 2007 10:29
Last Updated:
22 May 2010 19:50
Posted by:
Mikesdotnetting
Total Views to date:
18154
Printer Friendly Version
Comments
11 September 2009 08:09 from 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.
18 November 2009 01:07 from 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!
-Tsu
08 March 2010 10:15 from Mark
thanks! it's realy cool .
:)



30 April 2009 05:50 from Mohan
Hi
i am facing problem in retrieving the status of checkboxes
every time they showing as cheeck = false
here my code
.........
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="HeaderLevelCheckBox" runat="server" onclick="javascript:HeaderClick(this);" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Text='<%# Eval("APPROVAL_STATUS") %>' />
</ItemTemplate>
</asp:TemplateField>
<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
Next
any help would highly be appreciated