在学习 ASP.NET 的过程中很长一段时间对 DataGrid 控件的使用不甚了解,在晚上找到的一些 essay 也并不系统,这篇文章总结了我对 DataGrid 基本使用的一些理解,希望能对刚接触 asp.net 的朋友有一些帮助。
这篇文章主要包括三个主要内容:
1, DataGrid 绑定数据的实现
2, DataGrid 实现分页功能
3, DataGrid 实现数据编辑功能
文章中的示例在 Visual Studio.NET 2003 环境中实现,使用 SQL SRV2K 的示例数据库 Northwind.
1, DataGrid 绑定数据的实现
DataGrid 通常绑定数据源成为底层数据的显示控件。一般使用方法为通过 DataAdapter 控件的 Fill() 方法将数据库中的一张表读入 DataSet 中( DataSet 的字面意思即为数据系列,一个 DataSet 可以保存多张表格), DataSet 可以通过构造新的数据列( DataColumn )产生适合于页面现实的数据源。下面这个 Demo 使用 DataGrid 显示示例数据库 Northwind 中的 Employees 表格的 EmployeeID, , FirstName,LastName 以及由 FirstName 与 LastName 合成的 FullName 字段。
[ 前台文件代码 ]
AutoGenerateColumn 属性指定不允许 DataGrid 自动生成列, DataKeyField 属性指定 DataGrid 数据源中的某一列为数据源键值,用于唯一标示某一数据记录项,该属性的用法将在后面的 DataGrid 实现数据编辑功能中讲到。
[ 后台程序文件代码 ]
首先声明一个 SetBind() 方法,构造 DataGrid 的绑定关系,方便以后调用。
在 Page_load() 方法中添加如下代码:
这里请注意 Page.IsPostBack 的使用。 Page_Load() 方法在每次页面加载时发生, IsPostBack 用于判断该页是第一次加载抑或反送页面。据一个简单的例子,向 DropDownList 控件中添加数据项的方法,如果不放在 if(!Page.IsPostBack){} 中,则每次页面加载时都会向 DropDownList 控件中添加数据项。
2, DataGrid 实现分页功能
下面来实现如下图所示的分页效果:
[ 前台文件代码 ]
利用 DataGrid 控件的属性生成器定义 DataGrid 的各种属性,主要是将允许分页功能打开,以及定义每页显示的纪录数,即代码中标示的部分:
[ 后台代码文件 ]
要在 InitializeComponent() 方法中添加一句代码:
这句代码的功能是告诉编译器,当 DataGrid 发生换页事件时调用 Employee_PageIndexChange() 方法,我们来编写 Employee_PageIndexChange() 方法:
调用 SetBind() 方法是在对 CurrentPageIndex 属性赋值后重新构造 DataGrid 。这也是在 Page_Load() 方法中添加 IsPostBack 验证的原因。这样,基本的分页功能就实现了,关于自定义分页功能的实现,会在其他的文章中给予介绍。
3, DataGrid 实现数据编辑功能
数据项编辑功能是 DataGrid 控件与 DataList, Repeater 等最大的区别。在下面的例子中我们将实现如下图所示的数据编辑功能:
[ 前台文件代码 ]
利用 DataGrid 的属性生成器,进行如下操作:
1) 向 DataGrid 中添加两个按钮列,使用默认属性设置即可
2) 我们希望用户可以修改 FirstName,LastName 两个字段,因此我们把这两个字段“转换为模版列”,我们不希望用户修改 FullName 字段,因此该列的只读属性被设置为 True 。
3) 在如下图所示的代码段添加 id 属性,以便于我们在后面获得修改后的值
这样我们就完成了前台的设计。下面我们将进行后台编码文件的修改。
[ 后台代码文件 ]
在 InitialCompoment() 方法中添加如下代码,功能同刚才添加的换页代码。
这里我们要顺便提到另一个事件, ItemCommand ,其实利用 ItemCommand ,通过判断按钮列提交的命令文本,如: Delete, Update, Cancel, Edit 等(命令文本可以在属性生成器中修改),执行相应的代码。当触发按钮事件时,首先执行的是 ItemCommand 方法,然后才会执行我们上面生命的相关代码。下面将用两种方式实现编辑功能:
1 )添加 4 个方法,分别与上面声明的 4 个事件相对应:
[ 说明 ] EditTiemIndex 属性为 -1 表示没有任何一项处于编辑状态;我们在开始时提到的 EmployeeID 作为键值在此处用于索引数据,高亮部分代表作用数据项的 EmployeeID 。 FindControl 方法寻找我们刚才命名的 TextBox 并获得其值。
2 )利用 ItemCommand 方法实现: