一种Web数据分页显示技术
作者:杨毅
来源:《科技资讯》 2014年第7期
    杨毅
    (西华大学  四川成都  610039)
    摘  要:本文提出了一种控制Repeater控件中数据分页显示的新方法,可以自由控制分页控件的内容和格式。为了进一步方便复用,把此方法封装到自定义类中,只需要在Web页面中定义一个Repeater和一个Div控件,然后给出四个简单的参数去调用本方法,就可以完美地实现分页显示数据。
    关键词:Repeater  Div  分页  类  方法
    中图分类号:TP393  文献标识码:A
      文章编号:1672-3791(2014)03(a)-0000-00
    作者简介:杨毅(1973--),男,四川省巴中县人,副教授,硕士,主要研究方向为数据库技术、网络
计算。
    1  前言
    当一个网页显示数据记录太多时,既不美观也不方便,此时就需要对数据进行分页显示。早期,程序员曾使用手工方式控制SQL查询命令来实现分页显示大量的数据。后来,开始出现一些现成的分页控件[1,5],但一般都是比较死板,程序员只能机械地调用,很难对其实现随意增、删和调整。针对以上情况,许多新的分页技术[2,3,4]开始出现,一些程序员开始发布自己的技术源代码,在网络上共享自己的创新,进一步激发了这一技术的发展。
    纵观众多的分页技术,即使引用别人的源代码,都很难实现直接引用。本文提出一种新方法,程序员在前台界面定义一个显示数据的Repeater控件,在Repeater控件的尾部定义一个显示分页功能的Div层,然后把这两个控件和查询数据的SQL命令串作为参数传递给自定义类中的方法,从而实现分页技术的模块化。
   
    2 技术准备及思路
    本应用选用C#语言,使用VS.Net 2008中的Repeater控件和Div控件[5]。在项目中自定义一个类,在类中定义一个“page( )”方法,主要实现以下功能:
    (1)连接数据库,查询出所要显示的数据,并保存到一个DataSet中;(2)在div中动态生成各种控制分页的控件,如“上一页”、“下一页”等(程序员可以根据自己的需要来生成各种控件);(3)定义PagedDataSource控件,接收DataSet中的数据,设置PagedDataSource控件分页属性;(4)使用div中的分页控件来传递需要显示的页码,并把页码传递给PagedDataSource;(5)把PagedDataSource绑定到Repeater,显示分页后的数据记录。
    当需要分页显示数据时,程序员只需要把Repeater和Div控件的ID传递给page( )方法即可。
    3 编码实施及结果
    3.1 定义类和方法
    本处省略了数据库连接和打开操作的代码,仅给出类和方法的核心部分。
    public class Paging
    { public HtmlControl div11;
    public void page(Repeater Repeater1, string sql, int pagesize, HtmlControl div)
    { div11 = div;
    DataTable dt = ds.Tables[0];  //把查询的数据填充到一个DataSet类的ds中
    HyperLink firtp = new HyperLink(); firtp.Text = "首页"; //动态生成各分页控件
    HyperLink prep = new HyperLink();  prep.Text = "上一页";
    HyperLink nextp = new HyperLink(); nextp.Text = "下一页";
    HyperLink lastp = new HyperLink(); lastp.Text = "尾页";
    TextBox TextBox1yy = new TextBox(); TextBox1yy.ID = "TextBox1yy";
    TextBox1yy.Attributes.Add("runat", "server");
    Button Button1yy = new Button();  Button1yy.Text = "跳转"; //定义任意页跳转按钮
    Button1yy.Click += new System.EventHandler(Button1yy_Click);
    div11.Controls.Add(firtp);
      div11.Controls.Add(prep);
    div11.Controls.Add(nextp);
      div11.Controls.Add(lastp);
    div11.Controls.Add(TextBox1yy);  div11.Controls.Add(Button1yy);
    PagedDataSource pds = new PagedDataSource(); //生成一个PagedDataSource控件
    pds.DataSource = dt.DefaultView;
    pds.AllowPaging = true;
      pds.PageSize = pagesize; //指定每页行数
    int totalp = (dt.Rows.Count + pds.PageSize - 1) / pds.PageSize;//得出总行数
    Label1yy.Text = "总页数为:" + Convert.ToString(totalp);
    int curpage; //当前页
    if (Request.QueryString["Page"] != null)
    curpage = Convert.ToInt32(HttpContext.Current.Request.QueryString["Page"]);
    else  curpage = 1;
    pds.CurrentPageIndex = curpage - 1;
    if (!pds.IsFirstPage)
    prep.NavigateUrl = HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(curpage - 1);
    if (!pds.IsLastPage)
    nextp.NavigateUrl = HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(curpage + 1);
    Repeater1.DataSource = pds;
      Repeater1.DataBind(); //把pds绑定到Repeater1
    if (curpage != 1) //控制首页
    firtp.NavigateUrl = HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=1";
    if (curpage != totalp) //控制尾页
    lastp.NavigateUrl = HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + Convert.ToString(totalp);
    }
    protected void Button1yy_Click(object sender, EventArgs e) //“跳转”按钮功能实现
    {  TextBox ppp = (TextBox)this.div11.FindControl("TextBox1yy");
    string p = ppp.Text.Trim();
    HttpContext.Current.Response.Redirect(HttpContext.Current.Request.CurrentExecutionFilePath + "?Page=" + p);
    }
    }
    程序员可以根据实际需要,在div中生成满足自己要求的分页控件,分别设置其属性,以达到美化和协调的目的。
    3.2 定义前台和调用方法
    在Web页面前台定义一个Repeater控件,同时完成表格头的定义,把各列绑定到要显示的数据字段上。
在Repeater控件的尾部定义一个Div层,取名为“divpaging”。在相应的后台cs代码中调用方法“new Paging().page(Repeater1, sql, 5, divpaging);”。其中,“sql”是数据库的SQL查询命令串,“pagesize”为一页显示的数据记录数目,“div”是显示分页控件的容器。
    根据本算法,编写代码,测试结果如图1所示。
    当多个网页需要使用本技术时,只需要在前台快速地定义好Repeater和div控件,就可以直接调用本方法。从实验结果看,基本上实现了目前流行的分页功能。
分页预览    4 结论
    经过实验得知,此方法的优点在于,程序员可以随意定义和调整分页功能模块,只需要定义前台界面的控件,复用本技术就可以实现多个网页显示风格的统一,大大提升分页显示的效率。
    参考文献
    [1]  李兵,刘淑芬. 海量数据下的Web分页呈现研究[J].吉林大学学院(信息科学版),2005,23(5):518-521.
    [2]  郑平.基于Web的分而技术的研究与实现[J].计算机光盘软件与应用;2011,1(1):45-46.