好学IT学院:IT信息技术分享交流平台
标签:.NET  来源:互联网  作者:不详  发布时间:2007-01-04  ★★★加入收藏〗〖手机版
基于ASP.NET的自定义分页显示
摘要:摘要:本文针对WEB数据库记录的显示问题,用实例讨论了在ASP.NET框架下使用DataGrid控件对数据库记录的一种自定义分页显示。…

---- 返回到正确的结果

SELECT * FROM @t_table WHERE rownum >= @StartRow
ORDER BY rownum
GO

参数@StartRow和@StopRow接收整数值,代表要返回的开始记录和结束记录,如果要在一个25条记录的页面中返回第8页,我们就可以设置@StartRow为176,@StopRow为200。

table变量@t_table中定义了一个叫rownum的整数类型的列,并指定为标识符列,它将在插入数据的时候自动增加,起到排序作用。Set RowCount语句是优化性能的关键,它会告诉SQL Server进行限制要插入的数据,如果我们要176-200条记录之间的数据,那么就可以不必插入大于200条记录的数据。最后的SQL语句通过@t_table的table变量选择rownum大于或者等于@StartRow的那些数据集,然后把它们返回到Web服务器,由Web服务器绑定到DataGrid对象。但如果浏览者请求的页数越来越大,需要向table变量填充的记录就越多,导致页面性能有所下降。因此,性能将依赖于你计算机的硬件和你要返回的记录数,但为了减轻数据库和网络传输的压力,设计合理的查询结果页数是很见效的。

然后将为DataGrid对象编写代码来使用分页技巧。DataGrid的AllowPaging、AllowCustomPaging、PageStyle属性有助于记录用户的访问状态。首先设定AllowCustomPaging为True。我们使用SQLDataReader来装载DataGrid对象。据性能测试表明:在构建列表显示数据时,使用SQLDataReader比使用DataSet要快两倍以上。

为了追求性能最佳化,设定DataGrid的EnableViewState属性为false,因为这样在每次与Web服务器打交道时就不必再在viewstate中存储内容了。

当DataGrid不在viewstate中进行保存,需要添加导航按钮来帮助用户进行导航。

那么在页面上增加两个按钮:“上一页”和“下一页”。要进入下一页,就在“下一页”按钮上增加click事件,通过自定义分页存储过程请求相应的记录。例如:如果第一页由第1条到第25条记录组成,那么要导航到第二页,我们就向存储过程的@StartRow传递参数26,向@StopRow传递参数50即可,要返回到第一页,@StartRow和@StopRow分别为1和25。

在这里使用VB.NET编写“下一页”事件:

Private Sub ButtonNext_Click (ByVal sender As Object, _
ByVal e As System.EventArgs) Handles ButtonNext.Click
 viewstate("StartRow") = viewstate("StartRow") + dgrid.PageSize
 viewstate("StopRow") = viewstate("StartRow") + dgrid.PageSize
 '运行存储过程,返回SQLDataReader
 dgrid.DataSource = RunSprocReturnDR (textSt_lname.Text, textSt_fname.Text, viewstate("StartRow"),viewstate("StopRow"))
 dgrid.DataBind()
End Sub

在上面的例子中,viewstate中保存的只是@StartRow和@StopRow的信息,这比在viewstate中保存整个DataGrid对象高效的多。

结束语

以上程序是在SQL Server 2000实现的,但对于其他关系型数据库同样适用,比如ORACLE等等。列表显示信息的性能对浏览者的访问是很重要的,设计不好的列表显示会大大降低应用程序的性能,不管它的后端数据库是多么快速。使用自定义分页技术,可以避免DataGrid默认分页机制带来的缺陷,在.NET框架的强大冲击下,ASP.NET已成为新一代网站开发的主流技术,因此本文讨论的技术很具有实用价值。