数据网格之深入研究:分页和删除

ZDNet软件频道 时间:2003-04-24 作者:周靖译 |  我要评论()
本文关键词:
.NET框架通过DataGrid服务器控件简化了在网页上显示数据的过程。本文将深入一步,研究如何在同一个地方删除和分页,以及如何使整个过程更“优雅”。
本文译自Builder.com,未经许可请勿转载.NET框架通过DataGrid服务器控件简化了在网页上显示数据的过程。不过,虽然控件要比“经典”ASP更容易使用,但在实现它的一些较高级的功能时,仍需一定的技巧。我的上一篇文章介绍了如何从DataGrid及其基本数据库中删除记录。本文将深入一步,研究如何在同一个地方删除和分页,以及如何使整个过程更“优雅”。

使用内建事件占位符

让所有新事件协同工作的窍门在于,将Delete按钮的命令处理和内建的DeleteCommand事件联系起来。我刚开始认为该事件是在一个可编辑的DataGrid中和处理命令联系的,但稍后发现,DeleteCommand事件只是一个占位符事件,不和任何内部的删除操作相联系。所以,你可用它联系和处理自定义删除事件。

首先将LinkButton的CommandName变成Delete,并在<asp:datagrid>标记中添加一个OnDeleteCommand属性。这些改动如清单A所示。切换到代码隐藏文件,并进行如清单B所示的修改。编译并运行这个页。现在就会发现,删除处理将不再依赖ItemCommand事件,这就为处理PageIndexChanged事件铺平了道路。

为了使我们的分页控件能正常工作,需要处理PageIndexChanged事件并添加一些代码。我觉得这一部分是最容易使人困惑的。就我看来,DataGrid应该内在地处理它,因为在任何情况下,代码都不会改变。由于微软把它称为“内建”分页,所以单击“内建”分页控件时,用于更改页的处理程序也应该是内建的。在将来的一篇文章中,我将解释如何将这个功能封装到一个自定义DataGrid控件中。就目前来说,解决方案非常简单。请添加清单C的代码来处理事件和联系分页控件。

来看看子程序的参数。处理.NET框架的内建事件时,事件处理程序一般需要两个参数:sendere。其中,sender参数表示调用子程序的那个对象,而e是EventArgs类的一个实例或派生类,其中含有和事件有关的其他信息,处理程序可能需要用到这些信息。在这个例子中,e包含了更改Grid的当前页所需的一切。

工作尚未结束...

至此,我们的DataGrid已经完成了。编译和执行页,会看到一切都很顺利。单击来切换不同的页,你会看到页的变化非常正常。不过,现在请跳转到最后一个页,开始删除页上的所有记录。删除页上的最后一行后,注意会发生什么。

应该产生一个PageIndex错误。我花了一个多小时的时间来测试代码,琢磨各种问题,并试验各种解决方案,但都徒劳而返。经过一段时间的休整后,我突然知道这其实是一个非常简单的问题,而我居然没有更早地想到它。另外,我还十分吃惊地发现没有任何资料在讨论这个问题(这正是写作本文的一个主要动机)。


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