简单实现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();
  }

 

整体效果见图

posted @ 2008-09-21 10:23  杭东胜  阅读(638)  评论(0编辑  收藏  举报