1、1GridView 控件批量更新方法的改进研究与实现摘要:在 B/S 结构软件开发过程中,经常会遇到批量插入、修改、删除数据的情况。但 Visual Studio C#.Net GridView 控件一般一次只能更新一行数据。为了优化 GridView 控件的数据更新功能,本文对GridView 控件的批量更新方法进行了研究,给出了 GridView 控件通用批量更新方法的改进措施,并阐述了设计思想。 关键词:GridView;Visual Studio C#.Net;控件 中图分类号:TP311 文献标识码:A 文章编号:1008-4738(2013)02-0099-04 0 引言 ASP.
2、Net 是微软公司.Net 战略的重要组成部分,是一种建立在通用程序语言上的程序构架,能被 Web 服务器用来建立强大的服务器端 Web应用程序。ASP.Net 大量使用 Com 技术,将 Web 浏览器和 Web 服务器之间的数据交换完全包装起来。作为微软公司战略产品,ASP.Net 还提供一个统一的 Web 开发模型,其中包括 WEB 开发人员开发大型 Web 应用程序所需要的各种技术和服务。ASP.Net 还提供一种新的编程结构,可通过编译生成稳定性和伸缩性更好的 WEB 应用程序,并在安全性上有完整的保护机制。 ASP.Net 中的网格控件 GridView 以类似 Excel 电子表
3、格的形式提供给用户一个个性化的表格视图,表格视图中每一行代表来自数据源记2录集的一条记录。这样可以批量显示数据,也为更新数据创造了条件。同时 GridView 控件提供了丰富的、友好的智能标记界面,常用的更新、排序、分页、删除等操作几乎可以零代码实现。GridView 控件还具有分页等页面管理属性,可以自定义页面导航和计数,使分页管理和控制更加方便、合理。GridView 控件的面向对象的事件管理功能设计成会触发两个事件,一个在操作前发生,一个在操作后发生。操作前触发的事件多为“ing”事件,操作后触发的事件多为 “ed” 事件,比如 Sorting 事件和 Sorted 事件, 分别标示排序
4、前发生和排序后发生的事件;RowDeleting 和 RowDeleted 事件分别标示正在删除和删除后发生的事件。由于 GridView 控件出色的数据管理功能,因此深受开发人员的喜爱,在WEB 开发过程中被大量使用1。 1 问题的提出 在实际 WEB 项目开发过程中,经常会碰到插入、修改、删除等批量数据处理的情况。但 GridView 一般一次只能编辑一行。为了优化GridView 控件的数据更新功能,减少往返提交数据的代价,可以一次性批量编辑 GridView 中的所有行,以减少网络传输次数,达到提高系统性能的目的。 GridView 控件采用表格形式显示从数据库中获取的数据集合。但Gr
5、idView 控件本身只能对其所绑定的数据进行单行的更新,当需要对GridView 控件所绑定的数据进行大批量更新时, GridView 控件自身的单行更新效率就显得比较低下了。而目前已有的 GridView 控件批量更新方法虽然能实现批量更新,但存在许多缺陷。本文探讨了 GridView 控件3的单行更新、通用批量更新方法,并对 GridView 控件通用批量更新的方法进行了改进,并设计了算法。 2 解决问题的设计思路 2.1 通用批量更新方法2 虽然 GridView 控件一般只能单行更新数据,但通过变通,使用其他控件及模板技术仍然能实现批量更新数据功能,只是存在部分功能上的缺陷而已。通用
6、批量更新方法如下:首先用 TextBox 控件替换模板列中的 Label 控件,并将 TextBox 控件的 Text 属性设置为绑定数据表中欲更新的表字段,如:Bind(“Teacher_Name“) 。然后通过循环遍历 GridView 控件所加载的所有行,获取每一行 TextBox 控件的 Text 属性所设置的数据内容。通过 Update 语句更新数据,最后重新使用 Bind()方法绑定数据,达到批量更新 GridView 控件数据的目的。 2.2 通用批量更新方法存在的缺陷 GridView 控件的通用批量更新方法虽然能一次性批量更新所有数据记录集中的数据,但该方法却存在以下不足。
7、(1)使用该方法后无法重新使用 GridView 控件本身具备的单行更新编辑功能,每次都必须进行所有记录集数据的批量更新。 (2)模板列 ItemTemplate 中的内容仅有 TextBox 控件,需要更新记录集数据的绑定后状态和初始绑定状态均为 TextBox 控件的 Text 属性,无法实现记录集数据的静态绑定,同时也不利于观察、区分数据集数据批量更新前后的不同变化。 2.3GridView 控件通用批量更新方法的改进 4为了解决 GridView 控件一次性批量更新数据时存在的上述问题,本文对 GridView 控件的通用批量更新方法进行了部分改进,具体方法如下:(1)在 ItemTe
8、mplate 模板列中添加文本框控件 TextBox,将TextBox 控件的 Text 属性与 GridView 控件原来使用的 Lable 控件绑定到相同的数据字段,并将其默认状态隐藏。同时保持 EditItemTemplate 模板列的默认绑定不变。 (2)增加一个“批量保存”按钮 btn_AllSave。在触发btn_AllSaved 的 Click 事件时,首先判断 GridView 控件的记录集数据是否处于单行编辑状态。如果是单行编辑,则先进行单行的更新,否则将 ItemTemplate 模板列中的 TextBox 控件的 Visible 属性设置为True, Label 控件的
9、Visible 属性设置为 False,并将 GridView 控件本身的“编辑”列隐藏。 3 算法设计 本文以一个高校的人事管理系统为载体,阐述了对 GridView 控件通用批量更新方法的改进措施及算法设计思想。 (1)设置并建立数据库连接及相关表的查询语句设计; (2)在 GridView 控件的 ItemTemplate 模板列中添加 TextBox 控件,并将 TextBox 控件绑定到相应表字段。使 GridView 控件能正确显示数据库中的记录集; (3)设置 5 个类的全局公用标志变量,分别对应高校的人事管理系统中的教师姓名、性别、学历、电话、家庭住址五个 TextBox 控件
10、个字5段,用于监视这五个字段是否发生了变化。每次循环开始前,五个标志均置空。每个标志变量均在 TextBox 控件的 TextChanged 事件中进行重新设置。以确保循环时能监测到该行是否发生了变化; (4)以 GridView1.Rows.Count 进行计数循环,若该行五个标志中任何一个发生变化,即表明该行需要更新。若五个标志均为置空状态,即表明该行不需参与更新; (5)使用更新语句进行数据更新。 4 代码设计及分析 4.1GridView 控件 ItemTemplate 模板列的代码设计3 ID=“txtTeacherName“Height=“24px“ Width=“92px“ on
11、textchanged=“txtName_TextChanged“ 其中的功能是使用 Bind()方法将 TextBox 控件的 Text 属性绑定为数据库中表的“Teachername”字段 4.2 设计数据库连接字符串 在在 web.config WEB 配置文件中添加数据库连接字符串。 4.3 设计数据库绑定方法 bind() 6public SqlConnection Teacherconn = new SqlConnection(ConfigurationSettings.AppSettings“TeacherconnectionStrings “) ;/生成数据库连接类 Teach
12、erconn。 public void bind() string sqlstr = “select * from tb_Teacher“;/设计查询语句,查询教师表 SqlDataAdapter myda = new SqlDataAdapter(sqlstr, Teacherconn) ; DataSet myds = new DataSet() ; Teacherconn.Open() ; myda.Fill(myds, “tb_Teacher“) ;/用 tb_Teacher 表填充SqlDataAdapter 实例 GridView1.DataSource = myds;/将记录集绑
13、定到 GridView 控件的记录源 GridView1.DataBind() ; conn.Close() ; 4.4 生成修改字符串 StringBuilder queryTeacher = new StringBuilder() ;/字符串类 StringBuilder for (int temp= 0; temp 0)/判断更新操作是否成功 Response.Write(“alert(数据批量更新成功!)“) ; else Response.Write(“alert(数据批量更新失败!)“) ; 5 结束语 GridView 控件的批量数据更新功能是一种高效的编程策略,是 B/S结构软
14、件开发中非常实用的功能。将 GridView 控件的批量数据更新功能巧妙地运用到 B/S 结构软件中,可以提高 WEB 项目开发与运行效率,是B/S 结构软件开发中非常有价值的算法。 基于实际开发的软件工程项目,本文阐述了 Visual Studio.Net 平台下 GridView 控件的批量数据更新的改进算法,提出了改进措施,设计了算法,并给出了部分代码。本文在 Visual Studio 2008,SQL Server 2005 环境下调试通过。 参考文献 1 杨学全. Visual C#.NET Web 应用程序设计M.北京: 电子工9业出版社,2012:7-9. 2 刘伟. Visual C#程序设计与项目实践M.北京: 清华大学出版社,2011:108-112. 3 郑阿奇. Visual C#网络编程M. 北京:电子工业出版社,2011:178-181.