从ASP.NET DataGrid删除数据

ZDNet软件频道 时间:2003-03-13 作者:周靖 译 |  我要评论()
本文关键词:
本文介绍了如何快速设置一个DataGrid,并让它提供一个删除按钮和一个删除确认对话框;还解释了如何在数据库中处理删除命令。
本文译自Builder.comDataGrid服务器控件是.NET框架功能最强——也是文档化最差——的一项内置特性。不错,很容易就可让DataGrid接收和解析你的ADO.NET数据。但如果你没有正确理解它的高级工作原理,最终可能会花好几个小时的时间来责怪你的计算机。例如,从DataGrid中删除数据就是非常不直观的一项操作。为帮助你顺利完成任务,本文介绍了如何快速设置一个DataGrid,并让它提供一个删除按钮和一个删除确认对话框;还解释了如何在数据库中处理删除命令。

要想了解具体怎样从DataGrid中删除数据,首先要对DataGrid控件的工作原理有一个感性认识。如果还没有,请在网上查找相关资源来帮助自己上手。我个人推荐“An Extensive Examination of the DataGrid Web Control”。它应该是你的一个不错的起点。

准备工作

首先准备一个空的ASP .NET网页。请将清单A的代码添加到HTML视图。

如你所见,我们添加了一个隐藏列,它用于存储每个记录的主键,以便以后能用数据做一些事情。这样就有了一个基本的DataGrid,但仍需向它发送数据。请切换到代码隐藏视图,添加清单B的代码。

对于这个例子,我们准备使用许多人都有的Northwind示例数据库来试着处理一些数据。为简化问题,我们打算从代码隐藏文件中直接调用数据库。但在实际的项目中,这种命令应该转移到数据访问层,以实现一个完全模块化的设计(我将在以后的文章里详细解释应用程序体系结构)。编译并运行这个页,就可看到一个基本的、没有任何修饰的DataGrid。

但在大多数实际应用中,用户并不满足只能看到数据;他们还需要操纵它。所以在清单C中,我们在网格的最后一列添加一个删除按钮,这要通过修改网格代码的<columns>小节来实现。

如你所见,这段代码使用的是含有按钮的一个模板列,而不是一个ButtonColumn。为什么呢?这纯粹是语义上的一种决策。以后如果愿意,可采取类似方式在列中添加更多的按钮,而且不必改写大量代码。当然,事实上两种方式都是可行的。

任何删除按钮都必须配套提供一个确认对话框,否则就不算完整。因此,请在代码隐藏文件中添加清单D的代码。

显然,除非实际创建按钮,否则无法用按钮做任何事情。另外,除非将行和数据绑定,否则按钮是不会创建的。所以,我们利用ItemDataBound事件来触发以上代码的添加。

在.NET框架中,使用Attributes集合的Add()方法,可非常容易地为几乎任何ASP .NET对象添加一个JavaScript命令。但在此之前,必须先在Controls集合中找到按钮。.NET框架再次提供了便利,这一次使用的是FindControl方法。使用CType函数,将变量l设置成当前项的按钮的实例,再对这个实例进行操作。

编译并运行这个网页。现在一旦单击删除按钮,就会弹出一个对话框,要求你确认删除请求。单击【取消】,回发(postback)事件就不会被触发。单击【确定】,表单就会被提交。但到目前为止,什么事情都不会发生,因为还没有编写事件处理程序。让我们修改一下代码隐藏文件,令其能对ItemCommand事件进行处理。

清单E中,隐藏ID列标识出具体d需要删除的数据库项目。如前所述,实际的删除处理应包含在一系列单独的、用于数据访问的类中。此外,永远不要直接操作一个数据库,否则容易遭到SQL Injection攻击。

如果使用的只是一种类型的网格命令,那么ItemCommand已经足够。然而,如果想添加分页功能,局面就变得稍微有点复杂。不管使用的是默认还是自定义分页模式,页面链接实际都是LinkButton对象,它们以程序化的手段添加。这意味着它们可像其他任何LinkButton那样响应ItemCommand事件。在未来的文章里,我们准备更深入地探讨DataGrid,并研究如何实现不那么自动化的内置分页系统。

总结

尽管配备删除按钮的DataGrid是一种经常都要用到的特性,但要想真正创建一个,并针对数据库执行命令,却需要一定的技巧。不过,为理解这些高级DataGrid技术而付出的代价是值得的。等你熟练之后,就会发现DataGrid是多么有用!



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134