function SelectAllOrDeselect(CheckBox, Type, Column, HCheckBox) {
try {
var TotalChkBx = parseInt('<%= grd_EmpSelection.Rows.Count %>');
var TargetBaseControl = document.getElementById('<%= grd_EmpSelection.ClientID%>');
var TargetChildControl = null;
if (Column == "1") TargetChildControl = "chkTestSelect";
else TargetChildControl = "chkTrainingSelect";
var Inputs = TargetBaseControl.getElementsByTagName("input");
var SelectCount = 0;
//Checked/Unchecked all the checkBoxes in side the GridView.
if (Type == "1") {
for (var iCount = 0; iCount < Inputs.length; ++iCount) {
if (Inputs[iCount].type == 'checkbox' && Inputs[iCount].id.indexOf(TargetChildControl, 0) >= 0)
Inputs[iCount].checked = CheckBox.checked;
}
//Reset Counter
SelectCount = CheckBox.checked ? TotalChkBx : 0;
} else if (Type == "2") {
//Reset Counter
for (var iCount = 0; iCount < Inputs.length; ++iCount) {
if (Inputs[iCount].type == 'checkbox' && Inputs[iCount].id.indexOf(TargetChildControl, 0) >= 0)
if (Inputs[iCount].checked == true) SelectCount++;
}
//Modifiy Counter;
if (!CheckBox.checked && SelectCount > 0) SelectCount--;
//Change state of the header CheckBox.
if (SelectCount < TotalChkBx) HCheckBox.checked = false;
else if (SelectCount == TotalChkBx) HCheckBox.checked = true;
}
} catch (err) {}
}
protected void grd_EmpSelection_RowCreated(object sender, GridViewRowEventArgs e)
{
//e.Row.RowState == DataControlRowState.Edit not works on Alternating Rows
//if ((e.Row.RowState & DataControlRowState.Edit) > 0)
if (e.Row.RowType == DataControlRowType.DataRow && (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate))
{
CheckBox chkTestSelectAll = (CheckBox)this.grd_EmpSelection.HeaderRow.FindControl("chkTestSelectAll");
CheckBox chkTestSelect = (CheckBox)e.Row.Cells[1].FindControl("chkTestSelect");
chkTestSelectAll.Attributes["onclick"] = string.Format("javascript:SelectAllOrDeselect(this,'1','1', {0});", chkTestSelectAll.ClientID);
chkTestSelect.Attributes["onclick"] = string.Format("javascript:SelectAllOrDeselect(this,'2','1', {0});", chkTestSelectAll.ClientID);
CheckBox chkTrainingSelectAll = (CheckBox)this.grd_EmpSelection.HeaderRow.FindControl("chkTrainingSelectAll");
CheckBox chkTrainingSelect = (CheckBox)e.Row.Cells[1].FindControl("chkTrainingSelect");
chkTrainingSelectAll.Attributes["onclick"] = string.Format("javascript:SelectAllOrDeselect(this,'1','2', {0});", chkTrainingSelectAll.ClientID);
chkTrainingSelect.Attributes["onclick"] = string.Format("javascript:SelectAllOrDeselect(this,'2','2', {0});", chkTrainingSelectAll.ClientID);
}
}
The gridview checkbox will maintain the checked state during postback.
Reference
http://www.codeproject.com/KB/webforms/SelectingAllCheckBoxes.aspx