For the CheckBox add CheckChanged event and say AutoPostBack true and simply disable it and on Button click enable it
<asp:GridView ID="gvDemo" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" Text="CheckBox" runat="server" OnCheckedChanged="OnCheckedChanged"
AutoPostBack="true" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Code" HeaderText="Code" />
<asp:BoundField DataField="Name" HeaderText="Name" />
<asp:TemplateField>
<ItemTemplate>
<asp:Button Text="Submit" runat="server" OnClick = "EnableCheckBox" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[2]{
new DataColumn("Code", typeof(int)),
new DataColumn("Name", typeof(string)) });
dt.Rows.Add(1, "Jake");
dt.Rows.Add(2, "John");
dt.Rows.Add(3, "Micheal");
gvDemo.DataSource = dt;
gvDemo.DataBind();
}
}
protected void OnCheckedChanged(object sender, EventArgs e)
{
(sender as CheckBox).Enabled = false;
}
protected void EnableCheckBox(object sender, EventArgs e)
{
CheckBox chk = (sender as Button).NamingContainer.FindControl("CheckBox1") as CheckBox;
chk.Enabled = true;
chk.Checked = false;
}