在使用GridView控件的时候,有时候需要GridView控件有选择框列,勾选或反选某一行数据,选择所有行数据或者反选所有行数据,勾选某一行数据时可能还要判断是否所有行数据都已勾选从而控制“全选”选项是否需要选中,下面的实例将实现以上功能:
第一步:在页面中加一个隐藏域,用来放置选择的键值
<input id="TextBox1" runat="server" style="width: 39px" type="hidden" />
第二步:给GridView添加模板列,包括头模板和项模板:头模板加一个选择框,选择的时候调用一个名为selectAll(this)的JavaScript function,该function选择或反选GridView中的所有项,并将选择的项的键值保存在第一步添加的隐藏域中,项模板也加一个input type="checkbox"的选择框,value值为绑定的键值,选择的时候调用一个名为AddRemoveValues(this)的JavaScript function,该function将选择或反选GridView项的键值添加到隐藏域或从隐藏域中移除
<asp:TemplateField HeaderStyle-HorizontalAlign="left">
<HeaderTemplate>
<asp:CheckBox id="chk_SelectAll" Text="全选" runat="server" checked="false" οnclick="javascript:return selectAll(this)" />
</HeaderTemplate>
<ItemTemplate>
<input type="checkbox" id="chkSelect" runat="server" checked="false" οnclick="AddRemoveValues(this)"
Value='<%# DataBinder.Eval(Container.DataItem,"ID") %>' name="chkSelect"/>
</ItemTemplate>
</asp:TemplateField>
第三步:在GridView的DataBound事件中加入以下代码,使GridView选中的数据项在翻页以后再回到原来的数据页仍然能够被选中
HtmlInputCheckBox chkSelect = (HtmlInputCheckBox)e.Row.FindControl("chkSelect");
HtmlInputHidden txtHidden = (HtmlInputHidden)Page.FindControl("TextBox1");
string txtHiddenValue = txtHidden.Value.ToString();
if (txtHiddenValue.Contains(chkSelect.Value.ToString().Trim()))
{
chkSelect.Checked = true;
}
第四步:添加JavaScript function
function AddRemoveValues(oChk) //选择或反选单项时调用的function
{
if(oChk.checked)
{
document.getElementById('TextBox1').value +=oChk.value + "," ;
var allSelect = true;
for(var i=0;i<form1.elements.length;i++)
{
if(form1.elements[i].type=="checkbox")
{
if(form1.elements[i].checked == false && form1.elements[i].id != "chk_SelectAll")
{
allSelect = false;
}
}
}
if(allSelect)
{
document.getElementById('chk_SelectAll').checked = true;
}
}
else
{
document.getElementById('TextBox1').value = document.getElementById('TextBox1').value.replace(oChk.value+",","");
document.getElementById('chk_SelectAll').checked = false;
}
}
function selectAll(chkAll) //全选或反选时调用的function
{
if(chkAll.checked)
{
var txt = document.getElementById('TextBox1');
for(var i=0;i<form1.elements.length;i++)
{
if(form1.elements[i].type=="checkbox")
{
form1.elements[i].checked = true;
if(form1.elements[i].value != "on")
{
txt.value += form1.elements[i].value + ',';
}
}
}
}
else
{
for(var i=0;i<form1.elements.length;i++)
{
if(form1.elements[i].type=="checkbox")
{
form1.elements[i].checked = false;
}
}
document.getElementById('TextBox1').value = '';
}
}
第五步:在页面后台代码中获取选择的ID
string IDList = TextBox1.value.TrimEnd(new char[] { ',' }); //去掉结尾的逗号,得到键值集合,如:"1,2,3"
现在,选中项的键值集合就获取好了,需要利用这个集合做什么就看个人的意愿了。