Hi dorsa,
Check this example. Now please take its reference and correct your code.
HTML
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField HeaderText="Selectdata">
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" Checked='<%# Convert.ToBoolean(Eval("Checked").ToString()) %>'
OnCheckedChanged="OnCheckedChanged" AutoPostBack="true" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="PageName" HeaderText="PageName" />
</Columns>
</asp:GridView>
Namespaces
C#
using System.Data;
VB.Net
Imports System.Data
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
BindGridView();
}
}
private void BindGridView()
{
DataTable dt;
if (ViewState["Data"] == null)
{
dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("PageName"), new DataColumn("Checked", typeof(bool)) });
dt.Rows.Add("John Hammond", false);
dt.Rows.Add("Rick Stewards", false);
dt.Rows.Add("Huang He", false);
dt.Rows.Add("Mudassar Khan", false);
dt.Rows.Add("John Hammond", false);
dt.Rows.Add("Rick Stewards", false);
dt.Rows.Add("Huang He", false);
dt.Rows.Add("Mudassar Khan", false);
}
else
{
dt = ViewState["Data"] as DataTable;
}
GridView1.DataSource = dt;
GridView1.DataBind();
ViewState["Data"] = dt;
}
protected void OnCheckedChanged(object sender, EventArgs e)
{
GridViewRow selectedRow = (sender as CheckBox).NamingContainer as GridViewRow;
string selectedName = selectedRow.Cells[1].Text;
int index = selectedRow.RowIndex;
if (ViewState["Data"] != null)
{
DataTable dt = ViewState["Data"] as DataTable;
dt.Rows[index]["Checked"] = (sender as CheckBox).Checked;
if ((sender as CheckBox).Checked)
{
int duplicateCount = dt.Select("PageName='" + selectedName + "'").Length;
if (duplicateCount > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
if (i != index)
{
if (dt.Rows[i]["PageName"].ToString() == selectedName)
{
dt.Rows[i]["Checked"] = false;
}
}
}
}
}
ViewState["Data"] = dt;
}
BindGridView();
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
BindGridView()
End If
End Sub
Private Sub BindGridView()
Dim dt As DataTable
If ViewState("Data") Is Nothing Then
dt = New DataTable()
dt.Columns.AddRange(New DataColumn() {New DataColumn("PageName"), New DataColumn("Checked", GetType(Boolean))})
dt.Rows.Add("John Hammond", False)
dt.Rows.Add("Rick Stewards", False)
dt.Rows.Add("Huang He", False)
dt.Rows.Add("Mudassar Khan", False)
dt.Rows.Add("John Hammond", False)
dt.Rows.Add("Rick Stewards", False)
dt.Rows.Add("Huang He", False)
dt.Rows.Add("Mudassar Khan", False)
Else
dt = TryCast(ViewState("Data"), DataTable)
End If
GridView1.DataSource = dt
GridView1.DataBind()
ViewState("Data") = dt
End Sub
Protected Sub OnCheckedChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim selectedRow As GridViewRow = TryCast((TryCast(sender, CheckBox)).NamingContainer, GridViewRow)
Dim selectedName As String = selectedRow.Cells(1).Text
Dim index As Integer = selectedRow.RowIndex
If ViewState("Data") IsNot Nothing Then
Dim dt As DataTable = TryCast(ViewState("Data"), DataTable)
dt.Rows(index)("Checked") = (TryCast(sender, CheckBox)).Checked
If (TryCast(sender, CheckBox)).Checked Then
Dim duplicateCount As Integer = dt.[Select]("PageName='" & selectedName & "'").Length
If duplicateCount > 0 Then
For i As Integer = 0 To dt.Rows.Count - 1
If i <> index Then
If dt.Rows(i)("PageName").ToString() = selectedName Then
dt.Rows(i)("Checked") = False
End If
End If
Next
End If
End If
ViewState("Data") = dt
End If
BindGridView()
End Sub
Screenshot