作者:杨毅
来源:《科技资讯》 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.
发布评论