在上一篇中,我们已经开发了需要的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>
在你的aspx.cs文件中实现删除方法DeleteUsers_Click
我在此使用的是强类型的DataSet:EmployeeData,该DataSet中有一个数据表Employee,该数据表包含列:UserName,RealName,Email。
你可以在App_Code文件夹中添加该数据集。并添加EmployeeBLL.cs文件,代码如下:
本程序使用了GotDotNet的DataAccess Application Block 3.0控件,该控件及其使用方法可以到www.gotdotnet.com去下载。
不过,在使用的过程,我发现如果PostBack后CheckBox控件的选择状态不能保存。美中不足,为此我改进了CheckBox控件。在下一篇中,我将发布该解决方案,这又将设计到另一个控件的开发。
首先,在你的网站的Web.config文件中配置对该控件的引用。










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>

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

23

24

25

26

27

28

29

30

31

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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

你可以在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
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

不过,在使用的过程,我发现如果PostBack后CheckBox控件的选择状态不能保存。美中不足,为此我改进了CheckBox控件。在下一篇中,我将发布该解决方案,这又将设计到另一个控件的开发。
分类:
DotNet
· dotnet 9 通过 AppHostRelativeDotNet 指定自定义的运行时路径
· 如何统计不同电话号码的个数?—位图法
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 用c#从头写一个AI agent,实现企业内部自然语言数据统计分析
· 三维装箱问题(3D Bin Packing Problem, 3D-BPP)
· Windows上,10分钟构建一个本地知识库
· 使用 AOT 编译保护 .NET 核心逻辑,同时支持第三方扩展
· Java虚拟机代码是如何一步一步变复杂且难以理解的?