Hi prateekmj,
I have created sample that full fill your requirement.
You can manage in two different ways.
1. By calling with single Event.
HTML
<asp:GridView ID="gvcntct" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Sl. No." />
<asp:BoundField DataField="Name" HeaderText="Contact Name" />
<asp:BoundField DataField="Mobile" HeaderText="Mobile Number" />
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkboxSelectAll" runat="server" AutoPostBack="true" OnCheckedChanged="GetMobileNumberWithCheckBoxCheckUnCheck"
TextAlign="Left" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkEmp" runat="server" AutoPostBack="true" OnCheckedChanged="GetMobileNumberWithCheckBoxCheckUnCheck">
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine" Width="192px"></asp:TextBox>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Mobile",typeof(Int64)) });
dt.Rows.Add(1, "John Hammond", 1236547690);
dt.Rows.Add(2, "Mudassar Khan", 6985479651);
dt.Rows.Add(3, "Suzanne Mathews", 2315647892);
dt.Rows.Add(4, "Robert Schidner", 6598745633);
gvcntct.DataSource = dt;
gvcntct.DataBind();
}
}
protected void GetMobileNumberWithCheckBoxCheckUnCheck(object sender, EventArgs e)
{
string controlId = (sender as CheckBox).ID;
bool allchecked = true;
string numbers = "";
foreach (GridViewRow row in gvcntct.Rows)
{
CheckBox chkRow = (CheckBox)row.FindControl("chkEmp");
if (controlId == "chkboxSelectAll" && (sender as CheckBox).Checked)
{
chkRow.Checked = true;
}
else if (controlId == "chkboxSelectAll" && !(sender as CheckBox).Checked)
{
allchecked = false;
chkRow.Checked = false;
}
if (!chkRow.Checked)
{
allchecked = false;
}
else
{
if (!string.IsNullOrEmpty(numbers))
{
numbers += ",";
}
numbers += row.Cells[2].Text.Trim();
}
}
((CheckBox)gvcntct.HeaderRow.FindControl("chkboxSelectAll")).Checked = allchecked ? true : false;
TextBox2.Text = numbers;
}
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id", GetType(Integer)), New DataColumn("Name", GetType(String)), New DataColumn("Mobile", GetType(Int64))})
dt.Rows.Add(1, "John Hammond", 1236547690)
dt.Rows.Add(2, "Mudassar Khan", 6985479651L)
dt.Rows.Add(3, "Suzanne Mathews", 2315647892UI)
dt.Rows.Add(4, "Robert Schidner", 6598745633L)
gvcntct.DataSource = dt
gvcntct.DataBind()
End If
End Sub
Protected Sub GetMobileNumberWithCheckBoxCheckUnCheck(sender As Object, e As EventArgs)
Dim controlId As String = TryCast(sender, CheckBox).ID
Dim allchecked As Boolean = True
Dim numbers As String = ""
For Each row As GridViewRow In gvcntct.Rows
Dim chkRow As CheckBox = DirectCast(row.FindControl("chkEmp"), CheckBox)
If controlId = "chkboxSelectAll" AndAlso TryCast(sender, CheckBox).Checked Then
chkRow.Checked = True
ElseIf controlId = "chkboxSelectAll" AndAlso Not TryCast(sender, CheckBox).Checked Then
allchecked = False
chkRow.Checked = False
End If
If Not chkRow.Checked Then
allchecked = False
Else
If Not String.IsNullOrEmpty(numbers) Then
numbers += ","
End If
numbers += row.Cells(2).Text.Trim()
End If
Next
DirectCast(gvcntct.HeaderRow.FindControl("chkboxSelectAll"), CheckBox).Checked = If(allchecked, True, False)
TextBox2.Text = numbers
End Sub
2. By calling with seperate Event for HeaderCheckBox and DataRow CheckBox.
HTML
<asp:GridView ID="gvcntct" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Sl. No." />
<asp:BoundField DataField="Name" HeaderText="Contact Name" />
<asp:BoundField DataField="Mobile" HeaderText="Mobile Number" />
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox ID="chkboxSelectAll" runat="server" AutoPostBack="true" OnCheckedChanged="chkboxSelectAll_CheckedChanged"
TextAlign="Left" />
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkEmp" runat="server" AutoPostBack="true" OnCheckedChanged="chkEmp_CheckedChanged">
</asp:CheckBox>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<br />
<asp:TextBox ID="TextBox2" runat="server" TextMode="MultiLine" Width="192px"></asp:TextBox>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Mobile",typeof(Int64)) });
dt.Rows.Add(1, "John Hammond", 1236547690);
dt.Rows.Add(2, "Mudassar Khan", 6985479651);
dt.Rows.Add(3, "Suzanne Mathews", 2315647892);
dt.Rows.Add(4, "Robert Schidner", 6598745633);
gvcntct.DataSource = dt;
gvcntct.DataBind();
}
}
protected void chkboxSelectAll_CheckedChanged(object sender, EventArgs e)
{
string numbers = "";
foreach (GridViewRow row in gvcntct.Rows)
{
CheckBox chkRow = (CheckBox)row.FindControl("chkEmp");
if (((CheckBox)gvcntct.HeaderRow.FindControl("chkboxSelectAll")).Checked == true)
{
chkRow.Checked = true;
numbers += row.Cells[2].Text.Trim() + ",";
}
else
{
chkRow.Checked = false;
}
}
TextBox2.Text = numbers.Length > 0 ? numbers.Remove(numbers.Length - 1, 1) : string.Empty;
}
protected void chkEmp_CheckedChanged(object sender, EventArgs e)
{
string numbers = "";
bool allchecked = true;
CheckBox chkHeader = (CheckBox)gvcntct.HeaderRow.FindControl("chkboxSelectAll");
foreach (GridViewRow row in gvcntct.Rows)
{
if (!(row.FindControl("chkEmp") as CheckBox).Checked)
{
allchecked = false;
break;
}
}
foreach (GridViewRow row in gvcntct.Rows)
{
if ((row.FindControl("chkEmp") as CheckBox).Checked)
{
numbers += row.Cells[2].Text.Trim() + ",";
}
}
chkHeader.Checked = allchecked == true ? true : false;
TextBox2.Text = numbers.Length > 0 ? numbers.Remove(numbers.Length - 1, 1) : string.Empty;
}
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim dt As New DataTable()
dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id", GetType(Integer)), New DataColumn("Name", GetType(String)), New DataColumn("Mobile", GetType(Int64))})
dt.Rows.Add(1, "John Hammond", 1236547690)
dt.Rows.Add(2, "Mudassar Khan", 6985479651L)
dt.Rows.Add(3, "Suzanne Mathews", 2315647892UI)
dt.Rows.Add(4, "Robert Schidner", 6598745633L)
gvcntct.DataSource = dt
gvcntct.DataBind()
End If
End Sub
Protected Sub chkboxSelectAll_CheckedChanged(sender As Object, e As EventArgs)
Dim numbers As String = ""
For Each row As GridViewRow In gvcntct.Rows
Dim chkRow As CheckBox = DirectCast(row.FindControl("chkEmp"), CheckBox)
If DirectCast(gvcntct.HeaderRow.FindControl("chkboxSelectAll"), CheckBox).Checked = True Then
chkRow.Checked = True
numbers += row.Cells(2).Text.Trim() + ","
Else
chkRow.Checked = False
End If
Next
TextBox2.Text = If(numbers.Length > 0, numbers.Remove(numbers.Length - 1, 1), String.Empty)
End Sub
Protected Sub chkEmp_CheckedChanged(sender As Object, e As EventArgs)
Dim numbers As String = ""
Dim allchecked As Boolean = True
Dim chkHeader As CheckBox = DirectCast(gvcntct.HeaderRow.FindControl("chkboxSelectAll"), CheckBox)
For Each row As GridViewRow In gvcntct.Rows
If Not TryCast(row.FindControl("chkEmp"), CheckBox).Checked Then
allchecked = False
Exit For
End If
Next
For Each row As GridViewRow In gvcntct.Rows
If TryCast(row.FindControl("chkEmp"), CheckBox).Checked Then
numbers += row.Cells(2).Text.Trim() + ","
End If
Next
chkHeader.Checked = If(allchecked = True, True, False)
TextBox2.Text = If(numbers.Length > 0, numbers.Remove(numbers.Length - 1, 1), String.Empty)
End Sub
In both the cases you will get below output.
