标题 | 基于ASP.NET数据分页导航的设计与应用 |
范文 | 摘要:在ASP.NET动态网站开发过程中,数据分页是经常使用的一种技术,但DataList和Rep eater控件没有内置分页功能,需要编写分页代码,而这些分页代码大致相同。本文针对GridView、DataList和Repeater数据绑定控件,设计了分页导航用户控件,从而解决了网页开发过程中大量分页代码重复的问题,提高网站开发效率。 关键词:分页技术;用户控件;APS.NET 中图分类号:TP391 文献标识码:A DOI:10.3969/j.issn.1003-6970.2015.12.013 本文著录格式:袁芳基于ASP.NET数据分页导航的设计与应用[J]软件,2015,36(12):60-62 1 引言 随着计算机网络技术与互联网的发展与应用,人们越来越离不开网络,上网浏览新闻、网购、搜索信息、发帖子等活动已成了我们生活的一部分,从而使得网站数据库中的数据量呈现指数级增长。如果服务器端把用户请求的数据全部以一个页面发给客户端的话,由于数据量大,会增加页面显示时间和页面的总长度,这严重影响了用户的体验。针对这些问题,可以利用数据的分页技术来解决。利用ASP.NET技术,本文详细介绍了对网页数据分页的一些技术,并结合数据绑定控件的特点,设计分页导航的用户控件进行数据分页,从而提高网站开发效率。 2 内置分页功能的数据绑定控件 网页中数据访问的许多功能是由数据绑定控件来完成,ASP.NET有丰富的数据绑定控件,这是广大网站开发人员乐于使用ASP.NET进行网站开发的一个重要原因。ASP.NET3.5中提供了GridView、DataList、Reapeater、ListView等数据绑定控件,其中具有内置分页功能的有GridView控件、ListView控件和DetailsView控件,由于DetailsView控件每页只显示一条记录信息,本文就不做介绍。 2.1 GridView控件分页 GridView控件是以表格的形式显示数据源的数据。它有内置分页的功能,即该控件可以在不编写任何代码,仅仅设置相关属性情况下,就可以实现数据绑定和分页等功能。GridView控件要实现分页功能只需设置AllowPaging属性值为True,如果要指定每页显示的记录数,可以设置PageSize属性,默认该属性值为10条,分页效果可以在属性集合PagerSettings中进行设置。使用GridView内置分页功能实现数据分页,操作简单,降低了网站开发难度,提高了开发效率,但需一次性将数据表中满足条件的所有记录读入到内存,大大占用服务器资源,降低了服务器性能。所以这种分页方式适合数据量比较少的情况使用,当数据量成千上万时,就要编程分页,可以使用缓存技术、存储过程白定义分页等技术。 2.2 ListView控件与DataPager控件结合分页 从ASP.NET3.5开始,提供了全新的ListView控件和DataPager控件,结合使用这两个控件就可以实现分页显示数据的功能。ListView控件用于显示数据,功能非常强大,它提供了编辑、删除、插入、分页与排序等数据操作功能和强大的显示布局功能,同GridView控件类似,与GridView控件不同之处在于比GridView控件多了插入功能和使用用户定义的模板而不是行字段来显示数据。ListView控件的分页功能是通过DataPager控件来实现的。DataPager控件的PagedCountID属性值为ListView控件的ID值。DataPager控件摆放的位置可以是内嵌在ListView控件的 3 分页导航用户控件的设计与实现 在网站开发过程中,对GridView、DataList和Repeater数据绑定控件使用的比较频繁。当数据量很多时,就需要对数据进行分页,GridView控件白带了分页功能,但分页样式却差强人意。而DataList和Repeater控件在布局上可以灵活多变,但他们没有分页功能,只能由开发者编写大量代码手动开发,涉及分页数据的页面都要编写分页代码,而这些分页代码大致是相同的,这会导致程序代码重用率低,可维护性差和开发速度慢等问题。为了解决这些问题,本文设计和开发一个为这3个数据绑定控件都能使用的分页导航用户控件。 3.1 分页导航用户控件的界面设计 向网站项目中添加一个用户控件,将它命名为UserDataPagerControl.ascx,用于数据分页导航,在文件中添加7个控件,Label控件用于显示当前是第几页、共多少页,共多少条记录,4个LinkButton控件用于翻页,定位到首页、上一页、下一页和末页,DropDownList控件显示共多少页码的列表,Button控件“跳转”用于直接定位到DropDownList所选的页,设计如图l所示。 3.2 分页导航用户控件的后台代码 首先为分页导航控件创建几个属性,通过这些属性可以设置数据所需的参数,DataBindControIID属性是存放分页页面中数据绑定控件的ID信息,PageNum属性为每页显示数据的条数,DataSQL属性为查询数据表的sql语句,在全局的地方创建一个静态PageDataS ource分页数据源的对象pds,白定义一个BindDatalnfo方法,该方法是用来从数据库中查询_LH符合指定条件的记录,并将数据信息绑定到数据绑定控件中,其参数为当前页的索引值。在Page_Load事件中,第一次运行时,显示第一页,页面索引值为0,调用该方法,即if(!IsPostBack){BindDatalnfo(0);},BindDatalnfo方法的代码如下所示。
private void BindDatalnfo(int currentpage){ string controltype=dataBindControIID.GetType().ToString();//controltype为数据绑定控件的类型 controltype=controltype.Substring(controltype.LastlndexOf(“.”)+l,controltype.Length-l-cont roltype.LastlndexOf(“.”)); SqIConnection conn=new SqIConnection(Conf igurationManager.ConnectionStrings connD ataBase”].C onnectionString); pds.AllowPaging=true;//允许分页 pds.PageSize=pageNum;//每页显示数据条数 pds.CurrentPagelndex=currentpage;//currentpage为BindDatalnfo方法的参数值 conn.Open();//打开数据库连接 SqIDataAdapter sda=new SqIDataAdapter(sql,conn): DataSet ds=new DataSet(): sda.Fill(ds);//手巴执行得到的数据放在数据集中 pds.DataSource=ds.Tables[O].DefaultView;//把数据集中的数据放人分页数据源中 LabCount.Text=“第”+(pds.CurrentPagelndex+l)+“页共”+pds.PageCount+“页共”+pds.DataSourceCount+“条记录”; //当前页为首页时,设置“首页”、“上一页”按钮无效 if(pds.IsFirstPage){ lbtnFirst.Enabled=false; lbtnPre.Enabled=false;}else{ lbtnFirst.Enabled=true; lbtnPre.Enabled=true;} //当前页为末页时,设置“末页”、“下一页”按钮无效 if(pds.IsLastPage){ lbtnNext.Enabled=false: lbtnLast.Enabled=false;}else{ lbtnNext.Enabled=true: lbtnLast.Enabled=true;{ //给下拉列表控件添加页码值列表 if(!IsPostBack){ for(int i=1;i<=pds.PageCount;i++){ ddIPages.Items.Add(i.ToString());}} ddIPages.Selectedlndex=pds.CurrentPagelndex;//下拉列表控件显示当前页码 //判断页面数据绑定控件的类型,进行相应的数据绑定 if(controltype==“GridView”){ ((GridView)(dataBindControIID)).DataSource=pds; ((GridView)(dataBindControIID)).DataBind();} else if(controltype==“DataList”){ ((DataList)(dataBindControIID)).DataSource=pds; ((DataList)(dataBindControIID)).DataBind();} else{ ((Repeater)(dataBindControIID)).DataSource=pds; ((Repeater)(dataBindControIID)).DataBind();} conn.Close();}//关闭数据库连接 在页面定位时,主要设计首页、上一页、下一页、末页和跳转按钮的单击事件代码的编写,这些按钮的代码如下所述。在这5个按钮的单击事件中都定义一个整形int类型的局部变量pagelndex,“首页”按钮单击事件代码中对pagelndex变量赋“0”值;“上一页”单击事件代码中对pagelndex值为“pds.CurrentPagelndex-1”,“下一页”单击事件代码中对pagelndex值为“pds.CurrentPagelndex+1”;“末页”单击事件代码中对pagelndex值为“pds.PageCount-1”,跳转按钮的单击事件代码中pagelndex值为“Convert.ToInt32(ddIPages.Selectedltem.Text)-l”,这5个按钮单击事件代码最后都写上调用白定义方法BindDatalnfo,代码为“BindDatalnfo(pagelndex)”就可以完成翻页和页面的定位。 3.3 分页导航用户控件的应用 当分页导航用户白定义控件做好后,就可以像ASP.NET工具箱里控件一样把UserDataPagerControl用户控件拖到.aspx页面中,下面以GridView和DataList数据绑定控件为类,可以轻松的完成数据分页,在页面开发过程中可以重复使用UserDataPagerControl用户控件,从而大大提高开发的效率。 在GridView控件的页面Page_Load事件代码中,设置分页导航控件的属性值,添加如下代码,运行效果如图2所示 UserDataPagerControII.DataBindControIID=Gri dViewl: UserDataPagerControII.DataSQL="select ID,Ti tle,Style,Type from tbNews"; UserDataPagerControll.PageNum=6; 在DataList控件的页面Page_Load事件代码中,设置分页导航控件的属性值,添加如下代码.运行效果如图3所示。 UserDataPagerControll.DataBindControllD=Dat aListl: UserDataPagerControll.DataSQL="select Book Name.BookAuthor.BookPrice.Booklinage from tbBooks": UserDataPagerControll.PageNum=2; 4 总结 在Web应用程序开发中,数据分页是经常使用的一种技术,也是提高数据访问性能和用户体验的一主要手段。在动态网页开发过程中,对GridView、Da taList和Repeater数据绑定控件使用频率比较高,本文自定义了分页导航用户控件,该控件可以像工具箱里其它内置控件一样任意使用,适合对GridView、Da taList和Repeater数据绑定控件的数据进行分页,从而解决了动态网站开发过程中大量分页代码重复问题,提高了代码的重用率、网站的开发效率和系统的可维护性。 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。