实现GridView控件的删除多条记录功能系列(2)

    在上一篇中,我们已经开发了需要的CheckBox控件,其位于HughLin.dll中。在本篇我们将讲解如何使用该控件,进行删除多条记录功能。
    首先,在你的网站的Web.config文件中配置对该控件的引用。
<? xml version="1.0" ?>
< configuration  xmlns ="http://schemas.microsoft.com/.NetConfiguration/v2.0" >
< system .web >
        
< pages >
            
< controls >
                
< add  namespace ="HughLin.Web.UI.WebControls"  tagPrefix ="hlAsp"  assembly ="HughLin" />
           
</ controls >
        
</ pages >
</ system.web >
在你的aspx文件中,使用如下:
< asp:LinkButton  ID ="DeleteUsers"  runat ="server"  OnClientClick ="if (AspNetV2_CheckHasData('UserCheckBoxGroup1')) {return confirm('您确定要删除所选用户吗?');};else {alert('您还未选择用户!');return false;}"  OnClick ="DeleteUsers_Click"   CausesValidation ="false" > 删除用户 </ asp:LinkButton >

 1 < asp:GridView  ID ="EmployeeGrid"  runat ="server"  AutoGenerateColumns ="False"  DataKeyNames ="UserName"
 2             DataSourceID ="EmployeeGridDataSource" >
 3              < Columns >
 4                  < asp:TemplateField >
 5                      < HeaderTemplate >
 6                          < hlAsp:CheckBox  ID ="SelectAll"  runat ="server"  Group ="UserCheckBoxGroup1"  IsParent ="true"
 7                             Text ="全选"   />
 8                      </ HeaderTemplate >
 9                      < HeaderStyle  Width ="50px"   />
10                      < ItemStyle  Width ="50px"   />
11                      < ItemTemplate >
12                          < hlAsp:CheckBox  ID ="UserNameCheckBox"  runat ="server"  Group ="UserCheckBoxGroup1"  BindedValue ='<%#  Eval("UserName") % > ' />
13                      </ ItemTemplate >
14                  </ asp:TemplateField >
15                  < asp:BoundField  DataField ="RealName"  HeaderText ="姓名"  SortExpression ="RealName" >
16                      < HeaderStyle  Width ="100px"   />
17                      < ItemStyle  Width ="100px"   />
18                  </ asp:BoundField >
23                < asp:BoundField  DataField ="Email"  HeaderText ="电子信箱"  SortExpression ="Email" >
24                      < HeaderStyle  Width ="160px"   />
25                      < ItemStyle  Width ="160px"  HorizontalAlign ="left"   />
26                  </ asp:BoundField >
27              </ Columns >
28          </ asp:GridView >
29 < asp:ObjectDataSource  ID ="EmployeeGridDataSource"  runat ="server"  SelectMethod ="GetAllEmployees"
30         TypeName ="EmployeeBLL" >
31   </ asp:ObjectDataSource >
在你的aspx.cs文件中实现删除方法DeleteUsers_Click
 1     //  删除用户
 2      protected   void  DeleteUsers_Click( object  sender, EventArgs e)
 3      {
 4        EmployeeData employeeData = new EmployeeData();
 5
 6        // 获取被选中的用户名集合
 7        foreach (GridViewRow row in EmployeeGrid.Rows)
 8        {
 9            TableCell cell = row.Cells[0];
10            HughLin.Web.UI.WebControls.CheckBox userNameCheckBox = (HughLin.Web.UI.WebControls.CheckBox)cell.FindControl("UserNameCheckBox");
11            if (userNameCheckBox.Checked)
12            {
13                string userName = userNameCheckBox.BindedValue;
14                EmployeeData.EmployeeRow dataRow = employeeData.Employee.NewEmployeeRow();
15                dataRow.UserName = userName;
16                employeeData.Employee.Rows.Add(dataRow);
17                dataRow.AcceptChanges();
18                dataRow.Delete();
19            }
20        }
21        bool flag = (new EmployeeBLL()).DeleteEmployee(employeeData);
22        if (flag)
23        {
24            EmployeeGrid.DataBind();
25        }
26    }
    我在此使用的是强类型的DataSet:EmployeeData,该DataSet中有一个数据表Employee,该数据表包含列:UserName,RealName,Email。
    你可以在App_Code文件夹中添加该数据集。并添加EmployeeBLL.cs文件,代码如下:
 1      /**/ /// <summary>
 2    /// 删除员工数据
 3    /// </summary>
 4    /// <param name="employeeData">员工数据集合</param>
 5    /// <returns>删除是否成功</returns>
 6      public   bool  DeleteEmployee(EmployeeData employeeData)
 7      {
 8        bool flag = false;
 9        IDbTransaction tran = null;
10        string[] sourceColumns = 
11            new string[] { employeeData.Employee.UserNameColumn.ColumnName };
12        try
13        {
14            AdoHelper adoHelper = AdoHelper.CreateHelper(DbUtil.DbProvider);
15            IDbCommand insertCommand = null;
16            IDbCommand updateCommand = null;
17            IDbConnection conn = adoHelper.GetConnection(DbUtil.ConnectionString);
18            conn.Open();
19            tran = conn.BeginTransaction();
20            IDbCommand deleteCommand = adoHelper.CreateCommand(conn, "DeleteEmployee", sourceColumns);
21            deleteCommand.Transaction = tran;
22            adoHelper.UpdateDataset(insertCommand, deleteCommand, updateCommand, employeeData, employeeData.Employee.TableName);
23            tran.Commit();
24            flag = true;
25        }
26        catch
27        {
28            try
29            {
30                if (tran != null)
31                {
32                    tran.Rollback();
33                }
34            }
35            catch
36            {
37            }
38        }
39        return flag;
40    }
    本程序使用了GotDotNet的 DataAccess Application Block 3.0控件,该控件及其使用方法可以到 www.gotdotnet.com去下载。
    不过,在使用的过程,我发现如果PostBack后CheckBox控件的选择状态不能保存。美中不足,为此我改进了CheckBox控件。在下一篇中,我将发布该解决方案,这又将设计到另一个控件的开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值