一种Web数据分页显示技术

时间:2022-08-21 07:19:07

一种Web数据分页显示技术

摘 要:本文提出了一种控制Repeater控件中数据分页显示的新方法,可以自由控制分页控件的内容和格式。为了进一步方便使用,把此方法封装到自定义类中,只需要在Web页面中定义一个Repeater和一个Div控件,然后给出四个简单的参数去调用本方法,就可以完美地实现分页显示数据。

关键词:Repeater Div 分页 类 方法

中图分类号:TP393 文献标识码:A 文章编号:1672-3791(2014)03(a)-0017-02

当一个网页显示数据记录太多时,既不美观也不方便,此时就需要对数据进行分页显示。早期,程序员曾使用手工方式控制SQL查询命令来实现分页显示大量的数据。后来,开始出现一些现成的分页控件[1,5],但一般都是比较死板,程序员只能机械地调用,很难对其实现随意增、删和调整。针对以上情况,许多新的分页技术[2~4]开始出现,一些程序员开始自己的技术源代码,在网络上共享自己的创新,进一步激发了这一技术的发展。

纵观众多的分页技术,即使引用别人的源代码,都很难实现直接引用。本文提出一种新方法,程序员在前台界面定义一个显示数据的Repeater控件,在Repeater控件的尾部定义一个显示分页功能的Div层,然后把这两个控件和查询数据的SQL命令串作为参数传递给自定义类中的方法,从而实现分页技术的模块化。

1 技术准备及思路

本应用选用C#.net语言,使用 2008中的Repeater控件和Div控件[5]。在项目中自定义一个类,在类中定义一个“page( )”方法,主要实现以下功能:

(1)连接数据库,查询出所要显示的数据,并保存到一个DataSet中;(2)在div中动态生成各种控制分页的控件,如“上一页、下一页”等(程序员可以根据自己的需要来生成各种控件);(3)定义PagedDataSource控件,接收DataSet中的数据,设置Paged DataSource控件分页属性;(4)使用div中的分页控件来传递需要显示的页码,并把页码传递给PagedDataSource;(5)把PagedDataSource绑定到Repeater,显示分页后的数据记录。

当需要分页显示数据时,程序员只需要把Repeater和Div控件的ID传递给page( )方法即可。

2 编码实施及结果

2.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中生成满足自己要求的分页控件,分别设置其属性,以达到美化和协调的目的。

2.2 定义前台和调用方法

在Web页面前台定义一个Repeater控件,同时完成表格头的定义,把各列绑定到要显示的数据字段上。在Repeater控件的尾部定义一个Div层,取名为“divpaging”。在相应的后台cs代码中调用方法“new Paging().page(Repeater1,sql,5,divpaging)”。其中,“sql”是数据库的SQL查询命令串,“pagesize”为一页显示的数据记录数目,“div”是显示分页控件的容器。

根据本算法,编写代码,测试结果如图1所示。

当多个网页需要使用本技术时,只需要在前台快速地定义好Repeater和div控件,就可以直接调用本方法。从实验结果看,基本上实现了目前流行的分页功能。

3 结论

经过实验得知,此方法的优点在于,程序员可以随意定义和调整分页功能模块,只需要定义前台界面的控件,复用本技术就可以实现多个网页显示风格的统一,大大提升分页显示的效率。

参考文献

[1] 李兵,刘淑芬.海量数据下的Web分页呈现研究[J].吉林大学学院:信息科学版,2005,23(5):518-521.

[2] 郑平.基于Web的分而技术的研究与实现[J].计算机光盘软件与应用,2011,1(1):45-46.

[3] 高文鹏.Java Web分页技术与实现[J].电脑编程技巧与维护,2010,8(3):80-82.

[4] 董一华.基于缓存与分页策略优化Web数据查询性能[J].计算机时代,2006,1(9):8-10.

[5] 金雪云,陈建伟,等.Visual C#2008程序设计教程[M].北京:清华大学出版社,2011:2-7.

上一篇:CA6140车床的数控化改造 下一篇:数字阵列模块老炼系统的开发研制分析