剖析DataGrid在ASP.Net中的数据处理机制

时间:2022-08-30 09:23:29

剖析DataGrid在ASP.Net中的数据处理机制

摘要:基于以非连接环境方式访问数据库的应用程序中,datagrid是比较常用的数据处理控件。本文主要对DataGrid如何实现数据库的更新、删除和插入操作进行了论述.

关键词:;非连接环境;;DataGrid;数据处理

中图分类号:TP274文献标识码:A文章编号:1009-3044(2007)04-10898-01

1 DataGrid控件的主要结构

DataGrid是环境中开发以非连接环境方式访问数据库的应用程序常用的服务器控件。DataGrid 结构中所包含的几个对象集合是其实现对数据库数据处理的关键所在。

1.1 Items集合

DataGrid中每个绑定的数据行都是一个Item对象,可以使用Items集合获取指定的数据行。

1.2 Cells集合

每个Item对象由多个cell子对象构成,可以使用Cells集合获取Item中的每个列,并且可以通过Cell的Controls集合访问单元格中包含的子对象,这在数据编辑时非常有用。

1.3 Columns集合

通过Columns集合可以给DataGrid添加选择、编辑、删除等数据处理列,通过这些对象可以触发DataGrid中的特定事件,为处理数据库中的数据提供了接口。

2 DataGrid数据处理机制

2.1 在非连接环境方式下的数据处理机制

在非连接环境方式下通常使用数据适配器DataAdapter读取数据库中的数据并缓存至数据集DataSet中,客户端用户通过某些方式处理DataSet中的数据并调用DataAdapter的更新命令将结果提交回数据库。

因此,在正确配置DataAdapter的查询、删除、修改、添加命令对象后,如果我们找到一种方法能够通过DataGrid对数据集数据进行处理,我们就找到了将数据提交到后台数据库的简便而有效的方法。

2.2 DataGrid数据处理机制

通过给DataGrid自定义选择、编辑、更新、取消列,可以触发DataGrid与之相关的各个特定事件.在这些事件中,可以编写代码处理数据集中的相关数据并将其提交到服务器端的后台数据库。

2.2.1 选择列

DataGrid中包含命令名为“Select”的列(选择列),该列可触发DataGrid中的行索引更改事件SelectedIndexChanged。

DataGrid中包含命令名为“Edit”的列(编辑列),该列可触发EditCommand事件.该列通常与另外两个列配合使用:更新列和取消列,分别用于接受和取消当前的编辑结果。这两个列分别触发UpdateCommand和CancelCommand事件。

在UpdateCommand事件中,要取出DataGrid中当前被编辑行的各个单元格的数据必须先明确当前单元格的索引号与被绑定的数据表格的属性列的索引号的对应关系,该索引号必须减去手动添加的自定义列的数目才与数据表格的属性列的索引号相对应。其次,单元格中的数据存放在一个形如TextBox的Object对象中,该对象可以通过单元格的Controls[0]获取并转换成TextBox对象,即可按文本框的Text属性取出数据。

2.2.3删除列

DataGrid中包含命令名为“Delete”的列(删除列),该列可触发DeleteCommand事件。

3 应用实例

本案采用C#在Visual 2003中编写一个Web应用程序,谈谈使用DataGrid处理数据库数据的具体方法。所使用的DataGrid、SqlDataAdapter、SqlConnection、DataSet对象分别为DataGrid1、SqlDataAdapter1、cn、Ds1;数据表结构为Stu(stuID(Char(10), PrimeryKey, not null), name(varchar(10), not null),sex(char(2)),age(tinyInt)),该表存放于SQL Server 2000的students数据库。

在DataGrid1中需要添加选择、编辑、更新、取消、删除列,并创建各列对应的事件关联。

3.1 数据的装入和绑定

在PageLoad事件中生成完整的SqlDataAdapter对象,并完成初始化工作.关键代码参考如下:

sqlDataAdapter1=New SqlDataAdapter("select stuID, name, sex, age from stu",cn);

SqlCommandBuilder scb=New SqlCommandBuilder(sqlDataAdapter1);//生成适配器的插入、删除和更新命令

sqlDataAdapter1.Fill(ds1);

if (!IsPostBack){

DataGrid1.DataBind();

对指定行进行编辑时需要启用编辑状态,并且设置取消或提

交编辑结果的代码.在以下三个事件末尾都要添加DataGrid1.DataBind()代码以保证立即刷新绑定。

在DataGrid1的EditCommand事件中设置当前编辑的行索引:

DataGrid1.EditItemIndex=e.Item.ItemIndex;

3.2.2 放弃更改

在DataGrid1的CancelCommand事件中退出编辑模式并放弃编辑结果:

DataGrid1.EditItemIndex=-1;

3.2.3 确认并提交更新

在DataGrid1的UpdateCommand事件中将编辑的结果写入数据集并提交到数据库,主要代码参考如下:

TextBox[] tb=new TextBox[n]; //n为当前行需要更新的字段总数

int i=DataGrid1.SelectedIndex;

int rowsCount=DataGrid1.Columns.Count;//确定绑定的数据列的起始位置

tb[0]=(TextBox)(DataGrid1.Items[i].Cells[rowsCount+1].Controls[0]);//被编辑的name列

tb[1]=(TextBox)(DataGrid1.Items[i].Cells[rowsCount+2].Controls[0]);

DataRow dr=ds1.Tables[0].Rows[i];

dr.BeginEdit();

dr[1]=tb[0].Text;

dr[2]=tb[1].Text;…

dr.EndEdit();

sqlDataAdapter1.Update(ds1);

DataGrid1.EditItemIndex=-1;

3.3 数据行的删除

在DataGrid1的DeleteCommand事件中编写如下代码:

ds1.Tables[0].Rows[e.Item.ItemIndex].Delete();

sqlDataAdapter1.Update(ds1);

DataGrid1.DataBind();

3.4 数据行的添加

DataGrid的数据行是由被绑定的数据源数据决定的,故单独通过DataGrid添加一个行并不现实。解决这个问题有一个折衷的办法:用其他方式先给数据集中的数据表添加一个新行(当然必须给既不能自动生成、又不具有默认值的非空列赋随机初始值),再刷新DataGrid1对数据集的绑定,新增的空行当作一个普通行一并显示,即可通过“编辑”命令实现对该行数据的更新,从而达到新增一行的功能.因方式多种多样,本例参考代码从略。

4 结束语

DataGrid为非连接环境提供了较为完整的数据处理机制,正确认识了DataGrid控件的主体结构和非连接环境方式下使用SqlDataAdapter更新后台数据的方法,当处理的数据量较少、数据类型较简单时,就能得心应手地使用DataGrid,降低程序编写的复杂度。

参考文献:

[1]微软公司.数据库访问技术――程序设计[M].北京:高等教育出版社,2004.

[2]微软公司.面向.net的Web应用成程序设计[M].北京:高等教育出版社,2004.

本文中所涉及到的图表、注解、公式等内容请以PDF格式阅读原文。

上一篇:删除Office 2003-XP中的隐藏数据等 下一篇:高校师生网上互动平台的设计与实现