选择显示字体大小

利用sqldataadapter进行分页

利用sqldataadapter进行记录分页

说到分页,很多地方都会用到,不管是windows程序还是web程序,为什么要进行分页?很简单,如果blueidea bbs帖子列表不分页的话,几十万条记录,可想而知.......

分页有几种方法,可以用存储过程进行分页,将要显示的记录写入一个临时表中,再从临时表中取出这些记录,取出的记录呢,也就是当前页的记录了。
我这里谈到的,是利用sqldataadapter fill方法的重载,进行分页

public int fill (
    dataset dataset,
    int startrecord,
    int maxrecords,
    string srctable
)

参数:

dataset
要用记录和架构(如果必要)填充的 dataset。

startrecord
从其开始的从零开始的记录号。

maxrecords
要检索的最大记录数。

srctable
用于表映射的源表的名称。

返回值
已在 dataset 中成功添加或刷新的行数。这不包括受不返回行的语句影响的行。

示例方法:

datatable tbl = sqldataadapter.fill(objdst,1,10,"temp")

言归正传,在这个设计过程中,我们需要哪些参数呢?

1、_pagesize----int型,每页要显示的记录数

2、_pagecount----总记录数,这是需要算出来的

_pagesize可以在web.config中设定,至于_pagecount嘛,得首先知道总的记录数,所以,我们得先弄出记录数出来,大家可以用一条sql语句查询而得到,这里就不多说了。假定已得知记录数,现在计算总页数

_pagecount = (_recordcount % _pagesize==0) ? (_recordcount / _pagesize) : (_recordcount / _pagesize + 1);

这里用总记录数去除以每页显示的记录数,如果能整除,说明直接用记录数除以页记录数就能得到总页数,否则,就用记录数除页记录数再加上1就可得到总页数了
是不是具备这些就够了呢?
当然不够
想想,fill方法时的第二个参数startrecord怎么赋值呢?如果是第1页的话很简单,直接传1,因为我们从第1条开始取嘛,如果是第二页呢?怎么办?
假定,我们每页显示10条,当前是第2页,那么应该从多少条开始取??大家应该想到了,应该从11条开始,也就是取11-20条,那这里的11怎么得到?
算法:
(_page-1) * _pagesize + 1
(2-1) * 10 + 1 = 11
其中_page是当前页,但这个数必须大于1
ok,有了这些基础,再来分页就简单了

.....
int _page;
int _pagesize = 10;
int _pagecount;
int _recordcount;
system.text.stringbuilder sbpager = new system.text.stringbuilder();  //用来显示分页
//在.aspx页中调用,用以显示分页代码
public string getpager()
{
  return sbpager.tostring();
}
//计算出记录数
_recordcount = 134;
//判断当前页数
private void page_load(object sender, system.eventargs e)
  {
   if(request.querystring["page"]==null)
   {
    _page = 1;
   }
   else
   {
    _page = int16.parse(request.querystring["page"]);
            }
 ...............
  }
//开始填充数据
private void filllist()
  {
   _recordcount= bll.messagebll.getlistcount("");    //取得总记录数
   _pagecount = (_recordcount % _pagesize==0)?(_recordcount/_pagesize):(_recordcount/_pagesize+1);    //得到总页数
   int _minpage=1; 
   if(_page!=1)
   {
    _minpage = (_page-1)*_pagesize + 1;
   }
   this.repmsglist.datasource = bll.messagebll.getlist("",_minpage,_pagesize);
   this.repmsglist.databind();
   #region 打印页数
   
    for (int i = 1; i <= _pagecount; i++)
    {
     if (i == _page)
      //如果是当前页,不显示链接
      sbpager.append("<span >" + i.tostring() + "</span>&nbsp;");
     else
     {
       sbpager.append("<a href=?page="+i+">" + i + "</a>&nbsp;");
     }
     
    }
   sbpager.append(_recordcount + " records");
   #endregion
  }

在前台中
分页:<%=getpager()%>调用就ok了
这样,初级的分页就完成了
但这样写代码很烦琐,看以后能不能写成一个自定义控件.

经典论坛讨论帖:
http://www.blueidea.com/bbs/newsdetail.asp?id=2547620


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons