基于ASP.NET的自定义分页显示

asp.net|分页|显示

 摘要:本文针对WEB数据库记录的显示问题,用实例讨论了在ASP.NET框架下使用DataGrid控件对数据库记录的一种自定义分页显示。

  关键词:WEB数据库;ASP.NET;DataGrid;分页

  引言

  在用户进行数据查询时通常有这样的情况,一个数据库查询将返回太多的行,一致不能在一页中显示。如果用户正在使用一个慢的链接,发送特别大的数据结果可能要花很长的时间。一旦获得了数据,用户可能发现它不包含正确的内容,或者查询范围太大,没有容易的办法检查完所有的结果来找到重要的信息。因此,对查询结果分页显示将为用户可管理的数据查询提供极大的方便。分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一,现在网站基本上都提供了分页显示信息的功能,但大部分还是基于ASP的,而.NET平台框架是针对各种各样的Web应用设计的,因此本文讨论了一种在ASP.NET框架下实现查询记录自定义分页显示的技术。

  ASP.NET

  .NET是通过平台独立的数据描述方法(通过XML)和通用的访问媒介Internet来简化用户访问和存储信息的过程。

  ASP.NET是Microsoft.Net框架的核心元素,是一项基于服务器的强大技术,利用它,可以为WWW站点或企业内部网创建动态可以交互的HTML页面。ASP.NET 完全基于模块和组件,具有很好的可扩展性和可定制性。它主要包括WebForm和WebService两种编程模式。前者为用户提供功能强大、外观丰富的基于表单(Form)的可编程Web页面;后者通过对HTTP、XML、SOAP、WSDL等Internet标准的支持提供在异构网络环境下获取远程服务、链接远程设备、交互远程应用的编程界面。

  通过ADO.NET链接、操纵数据源

  在Microsoft公司推出开放式数据库互连(ODBC)应用程序编程接口(API)以来,出现了各种各样的数据库访问技术,而直到ADO.NET出现,API才能实时地给出处理效果。ADO.NET是ASP.NET应用程序用来与数据库进行通信的技术,使你可以同关系数据库和其他数据源进行交互。断开的访问是ADO.NET最重要的特性,是对ADO最大的改变。ADO.NET创建一个到数据库的链接,用从数据库中提取的信息副本填充数据集。如果改变了数据集(DataSet)中的信息,数据库里相应表格中的信息不会改变。需要时,可以把DataSet连回最初的数据源并应用所有的改变。

  ADO.NET主要依赖以下核心对象的功能。它们分为两个组:一组对象用来存放和管理数据(例如:DataTable,DataRow和DataRelation),另一组对象用来链接到某个特定的数据源(例如:Connections,Commands和DataReader类)
在大多数的情况下,需要的数据是在某个数据源(例如:某个关系数据库)中。要想对这些数据进行访问、提取并将其插入到适当的数据对象中,就必须使用数据源对象。使用数据源对象的目的是创建一个链接并把相关信息移入某个DataSet或DataReader中。一种最简单的数据库访问方法是:利用Command对象直接进入数据源并通过DataReader检索只读数据行。另一种选择:把数据放入某个断开链接的DataSet,从而在更长的时间段操作。
  用DataGrid控件分页显示记录

  在创建链接和命令对象之后就要把返回的记录显示出来。DataGrid控件是ASP.NET中功能最强大也是最复杂的数据控件,可以用它来显示和格式化数据表的数据,它除了内建的数据表现和方法之外,还允许用户自己定义表现形式。分页技术为用户可管理的数据查找提供方便。

  1、DataGrid内建分页技术原理

  DataGrid内建分页技术很容易实现,但数据量很大时,它的方便性是以牺牲性能为代价的。如果一个用户只要求100个页面中每页显示25条记录的第8页的结果集,服务器只需要发送第175-200行的数据即可,而不是1-1000行的完全数据。默认的传送方式如图1所示。

图1 DataGrid默认传送方式

  从图1中可以看出,DataGrid的内建分页方法效率不高,每次请求都必须把整个查询结果发送给Web服务器,Web服务器再把数据分成相应的页面。利用DataGrid的内建的分页方法尽管是很简单的,但是,由于Web应用的无序性特征,一个用户每次从一个页面转向另外一个页面时,DataGrid对象都被销毁并重新创建,这就意味着数据库服务器每次都必须发送全部的结果集。

  2、自定义分页技术

  那么如何通过自定义的分页方法来实现快速处理大量数据的结果集呢?

  它比DataGrid的默认分页方法更加快速有效,因为每次请求不需要把全部的数据结果都发送到Web服务器。相反,它只需要发送每个页面需要的那些数据集。自定义的分页方法只返回所要检索的那些结果集,如图2所示。

图2 自定义分页的传送方式

  从图2中可以看到,数据库每次只需要返回所要显示的数据记录。

  在ASP.NET页面中执行SQL命令的方法可以是直接执行也可以先将SQL命令封装在存储过程中,然后再页面中执行该存储过程。执行存储过程比直接执行SQL命令稍微复杂一些,但能显著提高数据库驱动的Web站点的性能。每次从ASP.NET页面直接执行SQL命令时,都需要SQL Server对其进行解析、编译和优化,而存储过程只需要进行一次解析、编译和优化。

  而这里自定义的分页方法就是使用存储过程来做分页的工作,而不是由Web服务器来做。

  首先,在数据库中建立一个存储过程,该存储过程接受两个输入参数,分别是要返回数据的第一条记录数和最后一条记录数。要创建一个返回指定条记录结果的存储过程,首先必须指定返回结果集的条记录数,这里用table变量(SQL Server 2000),table变量尽管是存储在内存中的,但在存储过程结束后自动释放。创建的存储过程如下:

create proc InsertStudents
@Student_Last_Name as varchar(100) = null,
@StartRow as int = null,
@StopRow as int = null
AS

  ---- 建立有标识符列的table变量

declare @t_table table
(
[rownum] [int] IDENTITY (1, 1) Primary key NOT NULL ,
[Student_Last_Name] [varchar] (40) ,
[Student_First_Name] [varchar] (20) ,
)

  ---- 在返回指定的@StopRow行数之后停止处理查询

Set RowCount @StopRow

  ---- 插入到table变量中

insert @t_table
(
[Student_Last_Name],[Student_First_Name]
)
SELECT [Student_Last_Name],[Student_First_Name]
FROM Students
WHERE Student_Last_Name like '%' + @Student_Last_Name like '%'
ORDER BY Student_Last_Name

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

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

时间: 2024-08-03 18:55:03

基于ASP.NET的自定义分页显示的相关文章

ASP中关于帖子分页显示的基本方法

ASP中关于帖子分页显示的基本方法 在了解了Recordset对象的以上属性和方法后,我们来考虑一下,如何运用它们来达到我们分页显示的目的.首先,我们可以为PageSize属性设置一个值,从而指定从记录组中取出的构成一个页的行数:然后通过RecordCount属性来确定记录的总数:再用记录总数除以PageSize就可得到所显示的页面总数:最后通过AbsolutePage属性就能完成对指定页的访问.好象很并不复杂呀,下面让我们来看看程序该如何实现呢? 我们建立这样一个简单的BBS应用程序,它的数据

Asp 解析 XML并分页显示源码_应用技巧

Asp 解析 XML并分页显示,示例源码如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

Asp 解析 XML并分页显示源码

Asp 解析 XML并分页显示,示例源码如下: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>

ASP中几种分页显示的比较

比较|分页|显示 下面通过对比来看看几种方式的用时对比. 一,使用存储过程分页,这种情况又分为两种方式: 第一种,使用command对象,如下: SetCmd=server.CreateObject("Adodb.Command") Cmd.ActiveConnection=conn Cmd.CommandText="ycuu_gb_getmsg" Cmd.CommandType=4'adCmdStoredProc cmd.prepared=true' setpar

基于Jquery+Ajax+Json实现分页显示附效果图_jquery

1.后台action产生json数据. List blackList = blackService.getBlackInfoList(mobileNum, gatewayid, startDate, endDate); int totalRows = blackList.size(); StringBuffer sb = new StringBuffer(); sb.append("{\"totalCount\":\""+totalRows+"\

开发基于ASP.NET的自定义日志系统

asp.net 摘 要 介绍了利用ASP.NET和VB.NET技术开发的用户日志管理系统,实现了对自定义格式数据库系统的动态管理,使得对日志信息的管理更加及时.高效,提高了工作效率. 关键词 ASP.NET:VB.NET:自定义:日志:数据库 自定义日志管理的数据库设计 自定义日志系统是校园网一卡通系统中机房刷卡子系统的一个基于B/S开发的功能模块,该系统的后台数据库为自定义格式的数据库系统.数据库中主要的用户表和日志表的结构如下: Structure FixUse '用户表Public ID

ASP实现Oracle数据记录的分页显示程序

oracle|程序|分页|数据|显示 本文仔细的阐述了利用ASP实现Oracle数据记录的分面显示步骤. 一.引言 通过浏览器访问数据量大的表时需要进行分页.ASP对数据库记录分页显示可以通过ADO对象集Recordset对象来实现.Recordset具有以下几个用于分页显示的属性: PageSize:每页显示的记录数. PageCount:根据用户设定好的PageSize和表中的总记录数,系统自动算出总页数.RecordCount:表中的总记录数. AbsolutePage:表示当前页码.如将

利用ASP实现Oracle数据记录的分页显示

oracle|分页|数据|显示 一.引言 通过浏览器访问数据量大的表时需要进行分页.ASP对数据库记录分页显示可以通过ADO对象集Recordset对象来实现.Recordset具有以下几个用于分页显示的属性: PageSize:每页显示的记录数. PageCount:根据用户设定好的PageSize和表中的总记录数,系统自动算出总页数.RecordCount:表中的总记录数. AbsolutePage:表示当前页码.如将AbsolutePage属性设为3,则当前记录移至第3页第1条(也就是第3

根据textbox1里的值搜索,在datalist里分页显示

问题描述 在datelist中数据分页显示我已经做好了,就是页面里有个ImageButton是搜索,点击ImageButton,根据textbox1里的值搜索在数据表中local,zujin,housetype,area这四个字段进行搜索,在datalist1里显示 解决方案 解决方案二:搜索文本框内容.分页显示数据示例//查询文本框内容设置<asp:TextBoxID="txtKeys"runat="server"Width="80px"