简单实现DataGrid添加CheckBox删除记录(转载纳米小心的博客)
今天项目中需要实现在DataGrid中添加CheckBox以方便删除记录的功能,仔细想了想,以前我的做法有bug,是通过在模板列中添加CheckBox控件,然后循环每个模板列判断该CheckBox是否选中,如果选中则将该CheckBox所在的行索引记下来作为删除的依据。这个方法表面上看删除是没有问题,但是一涉及分页或者是对DataGrid进行了查询后再来删除记录就会有bug,我重新整理了代码,找到了更简单的方法:
首先编辑模板列,然后添加CheckBox控件,另外再添加一个hidden控件,hidden是页面的隐藏域,我用它来保存该行记录的主键,给它的value属性加上服务器代码绑定数据字段
<%# DataBinder.Eval(Container.DataItem, "Code")%>
具体代码如下:
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<INPUT id=SelectedCode type=hidden value='<%# DataBinder.Eval(Container.DataItem, "Code")%>' runat="server">
<asp:CheckBox id="CBoxDelete" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="Id" HeaderText="编号"></asp:BoundColumn>
<asp:BoundColumn DataField="Code" HeaderText="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="Name" HeaderText="名称"></asp:BoundColumn>
</Columns>
DataGrid设置好之后,在页面上添加一个删除按钮,点按钮删除所有单选框被钩上的记录,cs代码如下:
private void BtnDelete_Click(object sender, System.EventArgs e)
{
System.Web.UI.WebControls.CheckBox CBoxDelete;
foreach (DataGridItem DgItem in DgUser.Items)
{
CBoxDelete=(CheckBox)DgItem.FindControl("CBoxDelete");
if(CBoxDelete.Checked)
{
string Code=((HtmlInputHidden)DgItem.FindControl("SelectedCode")).Value;
//有了Code,删除就很容易做到
MyUser.DeleteUser(Code);
}
}
this.BindDgUser();
}
整体效果见图