转自:https://blog.csdn.net/yl_99/article/details/6524826
添加一个模板列TemplateField.然后,切换到源代码进行后续的编辑.
在GridView控件中刚刚生成的<asp:TemplateField> </asp:TemplateField>标签对之间,添加一个<HeaderTemplate></HeaderTemplate>标签对和<ItemTemplate></ItemTemplate>标签对.
我们利用<HeaderTemplate>在列头处显示一个checkbox,用这个checkbox来触发全选和全不选的事件.而在<ItemTemplate>中添加的checkbox则会显示在每一条数据行中.
下面来看源代码:
<asp:TemplateField>
<HeaderTemplate>
<asp:CheckBox runat="server" ID="cbHead" OnCheckedChanged="SelectAll"
AutoPostBack="true" Text="全选">
</asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbItem" runat="server" AutoPostBack="True"
oncheckedchanged="ItemCheckBox_CheckedChanged" text-align="center"/>
</ItemTemplate>
<ItemStyle Width="50px"/>
</asp:TemplateField>
上面的代码相信大家肯定看明白了,那如何来实现全选和全不选呢?这就需要编辑SelectAll方法。
因为当我们点选了列头的checkbox就会触发OnCheckedChanged事件,而我们让该事件调用SelectAll方法,利用该方法来实现效果.要添加该事件,首先要在源代码中添加OnCheckedChanged="SelectAll" AutoPostBack="true" 语句,因为我们需要在点选该checkbox后,就让其它数据行的checkbox也选中,也就是说必须告诉服务器"我已经选中了",只有当服务器接收到该消息,才会执行SelectAll方法.
而AutoPostBack属性就是用于设置回发的,如果设置为true,表是点选该按钮后,就会将消息传给服务器端,否则就不会将消息传给服务器.
SelectAll方法如下:
protected void SelectAll(object sender, EventArgs e)
{
bool isChecked = ((CheckBox)
(GridView1.HeaderRow.Cells[0].FindControl("cbHead"))).Checked;
foreach (GridViewRow gvRow in GridView1.Rows)
{
((CheckBox)(gvRow.Cells[0].FindControl("cbItem"))).Checked = isChecked;
}
}