o use check box inside a grid view this piece of code will works fine.
Step 1:
<asp:GridView ID=”gvData” runat=”server” AutoGenerateColumns=”false” AllowPaging=”true”
PageSize=”3″ OnPageIndexChanging=”gvData_PageIndexChanging”>
<Columns>
<asp:BoundField DataField=”ID” HeaderText=”ID” />
<asp:BoundField DataField=”Firstline” HeaderText=”Name” />
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID=”chkStatus” runat=”server” AutoPostBack=”true” OnCheckedChanged=”chkStatus_OnCheckedChanged”
Checked='<%# Convert.ToBoolean(Eval(“Approved”)) %>’ Text='<%# Eval(“Approved”).ToString().Equals(“True”) ? ” Approved ” : ” Not Approved ” %>’ />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
Step 2:
In the page load method if u dont use if(!IsPostBack) then ur chkStatus_OnCheckedChangedevent will not fire and if u miss to call the FillData() method inside gvData_PageIndexChangingevent then your paging will not work.
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
FillData();
}
protected void FillData()
{
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings[“myConnection”].ToString());
SqlDataAdapter da = new SqlDataAdapter(“select * from tblDetails”, cn);
DataSet ds = new DataSet();
da.Fill(ds);
gvData.DataSource = ds;
gvData.DataBind();
}
protected void gvData_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
FillData();
gvData.PageIndex = e.NewPageIndex;
gvData.DataBind();
}
public void chkStatus_OnCheckedChanged(object sender, EventArgs e)
{
CheckBox chkStatus = (CheckBox)sender;
GridViewRow row = (GridViewRow)chkStatus.NamingContainer;
string cid = row.Cells[1].Text;
bool status = chkStatus.Checked;
string query = “UPDATE tblDetails SET Approved = @Approved WHERE ID = @ID”;
SqlConnection cn = new SqlConnection(ConfigurationManager.ConnectionStrings[“myConnection”].ToString());
SqlCommand com = new SqlCommand(query, cn);
com.Parameters.Add(“@Approved”, SqlDbType.Bit).Value = status;
com.Parameters.Add(“@ID”, SqlDbType.Int).Value = cid;
cn.Open();
com.ExecuteNonQuery();
cn.Close();
FillData();
}