方法一:
首先,你需要添加一列,用于放置复选框.如果你比较熟练,可以直接通过手动写代码来实现.如果,你还比较生疏,那么就进入设计页面,选择你的GridView控件.点击右上角的三角尖:
<asp:GridView ID="GridView1" runat="server">
<Columns>
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox runat="server" ID="cbHead" OnCheckedChanged="SelectAll" AutoPostBack="true">
asp:CheckBox>
HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat="server" ID="cbItem">asp:CheckBox>
ItemTemplate>
asp:TemplateField>
Columns>
asp:GridView>这样,便实现了预定的效果. [备忘:GridView数据呈现形式有点像Excel,也是由行列组成,每一行又由许多单元格组成,在每一个单元格内又可以放置任意多的东西(包括控件),因此如果我们想要得到GridView某行某列的某个控件,就要用GridView.Rows[index].Cells[index].Controls[index]之类的方式]
方法二:
但是,很明显,采用postBack方式并不是最好的,每次点选都会产生一次回发,服务器都需要进行处理,这对服务器性能影响是很大的.(一个用户可能还感觉不出来,如果有上千个用户呢?).因此,最好的办法,就是让客户端自己去处理选中的事件.这就需要js来帮忙.
把上述js代码添加到Head标签中.然后对GridView源代码进行一些修改,去掉OnCheckedChanged="SelectAll" AutoPostBack="true",添加onclick="javascript.:selectAll('GridView3',this.checked);"客户端事件.那么现在,当你再点选列头的checkbox时候就不会回发给服务器端处理了.
方法三:
有些朋友发现问题了,在上述的Js中,单纯地通过checkbox[i].type=='checkbox'来做判断,那不是意味着只要GridView控件中有checkbox,就对它进行了赋值吗,如果在其它列中也有复选框,那不是也受到连累了?
因此上述方法只适合于只有一列复选框的情况,但是如果出现多列复选框,怎么办呢?
我想到的方法就是通过名字来设置每一个复选框,也就是只有名字是符合的,我才对它进行操作.你可能会希望使用getElementsByName("checkbox名称")来获取控件,但是会发现,这样根本查找不到控件.因为asp.net中,为了防止绑定列在解释成HTML后出现ID、Name相同的控件,对每一个ID和NAME都进行了修改.大家可以参考这里.因此,我们只能利用控件的ClientID来获取修改后的ID.于是我通过在cs代码中注册js脚本来获取到该ID.如果,对于我所说的还不理解,请仔细阅读代码.
这样,就基本可以满足要求了.
源文件下载.(采用VS 2005开发)
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-605012/ ,如需转载,请注明出处,否则将追究法律责任。