Scott Mitchell 的ASP.NET 2.0数据教程之二十四.分页和排序报表数据
- 格式:doc
- 大小:761.00 KB
- 文档页数:21
ASP 数据的分页显示
在ASP中,数据的分页显示非常实用,它的应用可以使数据表中的多条数据实现分页显示,使数据的显示更加条理清晰。
本扩展练习的目的是:使数据表messageTable中的数据实现分页显示,并实现数据的翻页功能。
(1)创建一个命名为Message.asp的ASP页面,主要实现留言内容的添加。
左键单击【文件】|【新建】命令,弹出【新建文档】对话框,在对话框的【文件类型】中选择【ASP VbScript】,【布局】中选择【无】,单击【创建】按钮。
(2)左键单击【文件】|【保存】命令,弹出另存为对话框。
在对话框的【文件名】中输入Message.asp,【保存类型】的下拉列表框中选择“Active Server Pages(*.asp;*.asa)”,单击【保存(S)】按钮。
库驱动程序,然后建立链接并查询数据返回结果集rs
(5)向ASP文件中,添加表格,并在表格中输出数据。
首先向表格中添加标
(7)关闭数据库链接,代码如下所示。
.
图9-5 分页显示。
基于的⾃定义分页显⽰数据库分页基于的⾃定义分页显⽰数据库分页2008-12-04 14:00摘要:本⽂针对WEB数据库记录的显⽰问题,⽤实例讨论了在框架下使⽤ 摘要DataGrid控件对数据库记录的⼀种⾃定义分页显⽰。
关键词:WEB数据库;;DataGrid;分页关键词引⾔在⽤户进⾏数据查询时通常有这样的情况,⼀个数据库查询将返回太多的⾏,⼀致不能在⼀页中显⽰。
如果⽤户正在使⽤⼀个慢的链接,发送特别⼤的数据结果可能要花很长的时间。
⼀旦获得了数据,⽤户可能发现它不包含正确的内容,或者查询范围太⼤,没有容易的办法检查完所有的结果来找到重要的信息。
因此,对查询结果分页显⽰将为⽤户可管理的数据查询提供极⼤的⽅便。
分页显⽰是⼀种⾮常常见的浏览和显⽰⼤量数据的⽅法,属于web编程中最常处理的事件之⼀,现在⽹站基本上都提供了分页显⽰信息的功能,但⼤部分还是基于ASP的,⽽.NET平台框架是针对各种各样的Web应⽤设计的,因此本⽂讨论了⼀种在 框架下实现查询记录⾃定义分页显⽰的技术。
.NET是通过平台独⽴的数据描述⽅法(通过XML)和通⽤的访问媒介Internet来简化⽤户访问和存储信息的过程。
是框架的核⼼元素,是⼀项基于服务器的强⼤技术,利⽤它,可以为WWW站点或企业内部⽹创建动态可以交互的 HTML页⾯。
完全基于模块和组件,具有很好的可扩展性和可定制性。
它主要包括WebForm和WebService两种编程模式。
前者为⽤户提供功能强⼤、外观丰富的基于表单(Form)的可编程Web页⾯;后者通过对HTTP、XML、SOAP、WSDL等Internet标准的⽀持提供在异构⽹络环境下获取远程服务、链接远程设备、交互远程应⽤的编程界⾯。
通过链接、操纵数据源在Microsoft公司推出开放式数据库互连(ODBC)应⽤程序编程接⼝(API)以来,出现了各种各样的数据库访问技术,⽽直到出现,API才能实时地给出处理效果。
分页控件使⽤详解【附实例下载】本篇⽂章主要对创建事务的⽅法进⾏实例介绍,具有很好的参考价值,需要的朋友⼀起来看下吧⼀、说明AspNetPager.dll这个分页控件主要⽤于 webform⽹站,现将整理代码如下⼆、代码1、⾸先在测试页⾯Default.aspx页⾯添加引⽤<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %>2、写⼀个Repeater列表控件⽤于显⽰数据1 2 3 4 5 6 7 8<asp:Repeater ID="rptNews"runat="server"> <ItemTemplate> <li> <span><%# Eval("time") %></span> <a href="NewsShow.aspx?id=<%# Eval("id") %>"><%# Access.GetStringNum( Eval("name").ToString(),15) %></a> </li> </ItemTemplate></asp:Repeater>3、添加1 2 3 4 5 6<webdiyer:AspNetPager ID="AspNetPager1"runat="server"AlwaysShow="True"CustomInfoStyle="FONT-SIZE: 12px" FirstPageText="⾸页"HorizontalAlign="Center"inputboxstyle="width:19px"LastPageText="尾页"meta:resourcekey="AspNetPager1"NextPageText="下⼀页"PageSize="10"PrevPageText="上⼀页"Style="font-size: 14px"Width="95%"CssClass="anpager"CurrentPageButtonClass="cpb"OnPageChanging="AspNetPager1_PageChanging"ShowBoxThreshold="10"></webdiyer:AspNetPager> PageSize属性是⽤于设置每页显⽰的数量4、后台代码绑定Access是测试数据库访问类,在最后的Demo中提供给⼤家5、分页控件点击页码事件1 2 3 4 5 6//分页protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e) { this.AspNetPager1.CurrentPageIndex = e.NewPageIndex; ShowNews();}最后奉上整页代码:Default.aspx12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="Default" %> <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="webdiyer" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ""><html xmlns=""><head runat="server"><meta http-equiv="Content-Type"content="text/html; charset=utf-8"/><title>分页控件</title><link href="css/css.css"rel="stylesheet"type="text/css"/><style type="text/css">.aboutcontentnr{width:100%; height:auto; }</style></head><body><form id="form1"runat="server"><div><ul class="news"><asp:Repeater ID="rptNews"runat="server">17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 <asp:Repeater ID="rptNews"runat="server"><ItemTemplate><li><span><%# Eval("time") %></span><a href="NewsShow.aspx?id=<%# Eval("id") %>"><%# Access.GetStringNum( Eval("name").ToString(),15) %></a></li> </ItemTemplate></asp:Repeater></ul><div class="paginator"><webdiyer:AspNetPager ID="AspNetPager1"runat="server"AlwaysShow="True"CustomInfoStyle="FONT-SIZE: 12px"FirstPageText="⾸页"HorizontalAlign="Center"inputboxstyle="width:19px"LastPageText="尾页"meta:resourcekey="AspNetPager1"NextPageText="下⼀页"PageSize="10"PrevPageText="上⼀页"Style="font-size: 14px"Width="95%"CssClass="anpager"CurrentPageButtonClass="cpb"OnPageChanging="AspNetPager1_PageChanging"ShowBoxThreshold="10"></webdiyer:AspNetPager></div></div></form></body></html>Default.aspx.cs 123 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Data;public partial class Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if(!IsPostBack){ShowNews();}}//测试数据源private void ShowNews(){String strSql = String.Format("select * from News order by time asc");DataTable dtbl = Access.ExecuteDataTable(strSql, null);this.rptNews.DataSource = Access.GetPageDataSource(AspNetPager1, AspNetPager1.CurrentPageIndex - 1, dtbl); this.rptNews.DataBind();}//分页点击页码事件protected void AspNetPager1_PageChanging(object src, Wuqi.Webdiyer.PageChangingEventArgs e){this.AspNetPager1.CurrentPageIndex = e.NewPageIndex;ShowNews();}}三、Demo以上就是本⽂的全部内容,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,同时也希望多多⽀持脚本之家!原⽂链接:/lengzhan/p/6054583.html。
asp快速开发⽅法之分页函数log_Content"⾃⼰常⽤的ASP分页代码,将以下代码放⼊你的函数⽂件内,在使⽤的⽂件内写上<!--#include file="调⽤⽂件.asp" />,可以直接拿来⽤的!在需要调⽤的位置放上以下语句程序代码<%call pageList(总页数,每页⾏数,当前页,当前页URL,是否显⽰分页信息)%>程序代码function pageList(allNum,pagesize,page,pageUrl,showall)dim temppage,tempvalueif Isnumeric(allNum) thenif int(allNum)<1 then allNum=1 end ifelseallNum=1end ifif Isnumeric(pagesize) thenif int(pagesize)<1 then pagesize=10 end ifelsepagesize=10end ifif Isnumeric(page) thenif int(page)<1 then page=1 end ifelsepage=1end ifallNum = int(allNum)pagesize = int(pagesize)page = int(page)temppage=fix(allNum/pagesize)if allNum mod pagesize > 0 then temppage = temppage + 1 end ifif page>temppage then page=temppage end ifif pageUrl="" then pageUrl=Request.ServerVariables("SCRIPT_Name") end ifif instr(pageUrl,"?") = 0 then pageUrl = pageUrl & "?" end ifif Right(pageUrl,1) = "?" then pageUrl = pageUrl else pageUrl = pageUrl&"&" end ifif page > 10 thentempvalue = tempvalue & "<a href="""&pageUrl&"page=1"" title=""第⼀页""><span style=""font-family:webdings"">9</span></a> "end ifif page > 1 thentempvalue = tempvalue & "<a href="""&pageUrl&"page="&(page-1)&""" title=""上⼀页""><span style=""font-family:webdings"">3</span></a> " end iffor i=1 to 10if page-5+i>=1 and page-5+i<=temppage thenif page = page-5+i thentempvalue = tempvalue & page-5+ielsetempvalue = tempvalue & "[<a href="""&pageUrl&"page="&page-5+i&""">"tempvalue = tempvalue & page-5+itempvalue = tempvalue & "</a>]"end iftempvalue = tempvalue & " "end ifnextif page < temppage thentempvalue = tempvalue & "<a href="""&pageUrl&"page="&(page+1)&""" title=""下⼀页""><span style=""font-family:webdings"">4</span></a> " end ifif page < temppage-10 thentempvalue = tempvalue & "<a href="""&pageUrl&"page="&temppage&"""><span style=""font-family:webdings"" title=""最后页"">:</span></a> " end ifif showall = "all" or showall = true thentempvalue = tempvalue & "页次:"&page&"/"&temppage&"页共"&allNum&"条记录 "&pagesize&"条/页"end ifpageList = tempvalueend function。
Scott Mitchell 的 2.0数据教程01.创建一个数据访问02.创建一个业务逻辑层03.母板页和站点导航04.使用ObjectDataSource展现数据05.声明参数06.编程设置ObjectDataSource的参数值07.使用DropDownList过滤的主/从报表08.使用两个DropDownList过滤的主/从报表09.跨页面的主/从报表10.使用 GridView和DetailView实现的主/从报表11.基于数据的自定义格式化12.在GridView控件中使用TemplateField13.在DetailsView控件中使用TemplateField14.使用FormView 的模板15.在GridView的页脚中显示统计信息16.概述插入、更新和删除数据17.研究插入、更新和删除的关联事件18.在页面中处理BLL/DAL层的异常19.给编辑和新增界面增加验证控件20.定制数据修改界面21.实现开放式并发22.为删除数据添加客户端确认23.基于用户对修改数据进行限制24.分页和排序报表数据25.大数据量时提高分页的效率26.排序自定义分页数据27.创建自定义排序用户界面28.GridView里的Button29.用DataList和Repeater来显示数据30.格式化DataList和Repeater的.数据31.使用DataList来一行显示多条记录32.数据控件的嵌套33.基于DataList和Repeater使用DropDownList过滤的主/从报表34.基于DataList和Repeater跨页面的主/从报表35.使用Repeater和DataList单页面实现主/从报表36.在DataList里编辑和删除数据概述37.DataList批量更新38.处理BLL和DAL的异常39.在DataList的编辑界面里添加验证控件40.自定义DataList编辑界面41.DataList和Repeater数据分页42.DataList和Repeater数据排序(一)43.DataList和Repeater数据排序(二)44.DataList和Repeater数据排序(三)45.DataList和Repeater里的自定义Button46.使用SqlDataSource控件检索数据47.用SqlDataSource控件插入、更新、删除数据48.对SqlDataSource控件使用开放式并发49.为GridView控件添加RadioButton50.为GridView控件添加Checkbox51.从GridView的页脚插入新记录52.使用FileUpload上传文件53.在Data Web控件显示二进制数据54.添加新记录时包含一个文件上传选项55.编辑和删除现有的二进制数据56.使用ObjectDataSource缓存数据57.在分层架构中缓存数据58.在程序启动阶段缓存数据59.使用SQL缓存依赖项SqlCacheDependency60.创建一个自定义的Database-Driven Site Map Provider61.在事务里对数据库修改进行封装62.GridView批量更新数据63.GridView实现批量删除数据64.GridView批量添加数据65.在TableAdapters中创建新的存储过程66.在TableAdapters中使用现有的存储过程67.在TableAdapters中使用JOINs68.为DataTable添加额外的列69.处理Computed Columns列70.配置数据库连接和命令等级设置71.保护连接字符串及其它设置信息72.调试存储过程73.用Managed Code创建存储过程和用户自定义函数(上部分)74.用Managed Code创建存储过程和用户自定义函数(下部分)。
实现的通⽤分页函数本⽂实例讲述了实现的通⽤分页函数。
分享给⼤家供⼤家参考,具体如下:功能:1.每页设置显⽰9页,超过9页,点5页后的+1页显⽰(可以随便修改)2.CSS样式⾃⼰可以设置3.⽆任何咋代码产⽣,利于搜索引擎优化分页程序objPDS = new PagedDataSource();objPDS.DataSource = dtTable.DefaultView;//绑定数据源objPDS.AllowPaging = true;objPDS.PageSize =10;//分页数⽬int curPage;int cshi;int jshi;int zyes = Int32.Parse( objPDS.PageCount.ToString());this.tjixx.Text = "总共 <font color=red>" + dtTable.Rows.Count + " </font>条信息";this.tjixx.Text += "|共 <font color=red>" + zyes + " </font>页";if (Request.QueryString["Page"] != null){if (Int32.Parse(Request.QueryString["Page"]) > zyes)curPage = zyes;elsecurPage = Int32.Parse(Request.QueryString["Page"]);}else{curPage = 1;}if (zyes <= 9){cshi = 1;jshi = zyes;}else{if (curPage <= 5){cshi = 1;jshi = 9;}else{cshi = curPage - 4;int jshils = curPage + 4;if (jshils > zyes)jshi = zyes;elsejshi=curPage + 4;}}objPDS.CurrentPageIndex = curPage - 1;StringBuilder m_strPageInfo = new StringBuilder();for (int i = cshi; i <=jshi; i++){if (i == Int32.Parse(curPage.ToString()))m_strPageInfo.Append(" <span class=\"dqye\"> <strong>" + i + " </strong> </span> ");elsem_strPageInfo.Append(" <span class=\"qtye\"> <strong> <a href=\"newslist_ej" + Request.QueryString["wzcat"] + "_Page" + i + ".html\">" + i + " </a> </strong> </span> "); }this.yemsl.Text = m_strPageInfo.ToString();if (!objPDS.IsFirstPage){linkPre.NavigateUrl = "newslist_ej" + Request.QueryString["wzcat"] + "_Page" + Convert.ToString(curPage - 1);linkPre.NavigateUrl += ".html";}if (!objPDS.IsLastPage){linkNext.NavigateUrl = "newslist_ej" + Request.QueryString["wzcat"] + "_Page" + Convert.ToString(curPage + 1);linkNext.NavigateUrl += ".html";}linkFirstPage.NavigateUrl = "newslist_ej" + Request.QueryString["wzcat"] + "_Page1";linkFirstPage.NavigateUrl += ".html";linkEndPage.NavigateUrl = "newslist_ej" + Request.QueryString["wzcat"] + "_Page" + objPDS.PageCount.ToString();linkEndPage.NavigateUrl += ".html";this.DataList4.DataSource = objPDS;//绑定分页的数据this.DataList4.DataBind();Aspx⽂件:分页部分:<div align="center"> <asp:HyperLink ID="linkFirstPage" runat="server" Font-Underline="False">⾸页 </asp:HyperLink><< <asp:HyperLink ID="linkPre" runat="server" Font-Underline="False">上⼀页 </asp:HyperLink><asp:Literal ID="yemsl" runat="server"> </asp:Literal><asp:HyperLink ID="linkNext" runat="server" Font-Underline="False">下⼀页 </asp:HyperLink> >> <asp:HyperLinkID="linkEndPage" runat="server" Font-Underline="False">尾页 </asp:HyperLink>| <asp:LiteralID="tjixx" runat="server"> </asp:Literal> </div>更多关于相关内容感兴趣的读者可查看本站专题:《》、《》及《》。
WebApi实现数据的分页前⾔这篇⽂章我们将使⽤不同的⽅式实现⼿动分页(关于⾼端⼤⽓上档次的OData本⽂暂不涉及,但有可能会在系列的后期介绍,还没确定。
),对于分页的结果,我们将采⽤2种不同的⽅式响应给客户端(1.将分页元数据封装在响应Body中2.在http响应报⽂头部添加分页信息)。
众所周知,在服务器端⼀次性返回成百上千条数据是⾮常恐怖的,在我们设计Api的时候,对于Get⽅法我们应该以分页的⽅式返回。
例如:每次响应给客户端10条数据,并且包含“上⼀页”和“下⼀页”的标签,这样⽤户就能去获得他想要的数据。
Way1.封装分页元数据封装在响应Body中修改“CoursesController”的Get⽅法实现分页⽽不是⼀次性把所有数据返回,下⾯上代码:public Object Get(int page = 0, int pageSize = 10){IQueryable<Course> query;query = TheRepository.GetAllCourses().OrderBy(c => c.CourseSubject.Id);var totalCount = query.Count();var totalPages = (int)Math.Ceiling((double)totalCount / pageSize);var urlHelper = new UrlHelper(Request);var prevLink = page > 0 ? urlHelper.Link("Courses", new { page = page - 1 }) : "";var nextLink = page < totalPages - 1 ? urlHelper.Link("Courses", new { page = page + 1 }) : "";var results = query.Skip(pageSize * page).Take(pageSize).ToList().Select(s => TheModelFactory.Create(s));return new{TotalCount = totalCount,TotalPages = totalPages,PrevPageLink = prevLink,NextPageLink = nextLink,Results = results};}解释⼀下上⾯的代码:客户端收到的部分响应就应该是:{"totalCount": 32,"totalPages": 4,"prevPageLink": "http://localhost:3300/api/courses?page=0&pageSize=10","nextPageLink": "http://localhost:3300/api/courses?page=2&pageSize=10","results": [{"id": 11,"url": "http://localhost:3300/api/courses/11","name": "English Education 2","duration": 4,"description": "The course will talk in depth about: English Education 2","tutor": {"id": 4,"email": "Kareem.Ismail@","userName": "KareemIsmail","firstName": "Kareem","lastName": "Ismail","gender": 0},"subject": {"id": 4,"name": "English"}},Repository中GetAllCourses的返回值为IQueryable,因此在执⾏skip和take⽅法时并没有到SQL Server中执⾏SQL语句,最后查询的也是分页好的数据,体现出按需查询的特⾊。
数据列表控件的分页总结(三):可定制分页用户控件前一篇文章是采用存储过程来进行分页的,但是存在缺陷,没有代码重用,针对不同的表或者不同的视图都需要去编写存储过程,这样很麻烦,代码的重用性很差。
本文将通过一个用户控件来实现数据分页的页面层以达到代码重用的目的。
分页是借助用户自定义控件来实现,在这里主要有以下两种方法来实现:(一).吴旗娃的AspNetPager组件(推荐使用)首先,下载该dll文件。
下载地址:AspNetPager分页控件在工具箱中,鼠标右键,“选择项”,添加刚下载的dll文件。
然后,将会在工具箱中看到一个AspNetPager分页控件,拖到页面,再拖一个数据显示控件,Gridview或Repeater。
最后,写后台代码如下:using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.Data.SqlClient;public partial class _Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){BindData();}}//获取并绑定数据public void BindData(){//连接数据库string strCon = "server=.;database=Northwind;uid=sa;pwd=";SqlConnection con = new SqlConnection(strCon);string sql = "select * from Customers";SqlDataAdapter sda = new SqlDataAdapter(sql,con);DataSet ds = new DataSet();sda.Fill(ds);//AspNetPager分页控件如何用DataView dv = ds.Tables[0].DefaultView;//使用PagedDataSource类PagedDataSource pds = new PagedDataSource();AspNetPager1.RecordCount = dv.Count;//取得记录总数pds.DataSource = dv;pds.AllowPaging = true;//取得当前页的索引pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex - 1;pds.PageSize = AspNetPager1.PageSize;//取得每页显示的记录数GridView1.DataSource = pds; //指定数据源GridView1.DataBind();}protected void AspNetPager1_PageChanged(object sender, EventArgs e){BindData();}}就这么简单几步就OK啦,那么我们如何为AspNetPager分页控件定义及应用样式。
牛腩新闻发布系统不知不觉就看完了,第一次接触网页制作,感觉很多知识点都是新的,虽然新,但是有种似曾相识的感觉,利用米老师的织网学习法,很快便消化了!由于学到的东西太多太多,而且很杂,就没有发到博客上来。
看到最后,牛腩大哥没有做分页,但是我感觉这是一个相当重要的功能,几乎是网页必备。
作为一个锻炼的机会,自己实现了一下分页功能。
第一次做,显得很生疏,为了方便以后参考和方便更多人学习,特总结成一篇文章。
本文使用的分页控件为AspNetPager。
注意这篇文章不适合没有任何网页编程经验的人看,我写的只是关键步骤,宏观模块,并没有细节实现,但是我可以保证补全代码之后绝对可以实现。
看懂这个必须是你亲自用编写过网页程序。
还是那句话,我的方法肯定不是最好的,如果您有好的建议欢迎与我交流!!效果图:分页控件样式设置:/*拍拍网风格*/.paginator { font: 11px Arial, Helvetica, sans-serif;padding:10px 20px 10px 0; margin: 0px;}.paginator a {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none;margin-.paginator a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none .paginator .cpb {padding: 1px 6px;font-weight: bold; font-size: 13px;border:none}.paginator a:hover {color: #fff; background: #ffa501;border-color:#ffa501;text-decoration: none;}/*淘宝风格*/.paginator { font: 12px Arial, Helvetica, sans-serif;padding:10px 20px 10px 0; margin: 0px;}.paginator a {border:solid 1px #ccc;color:#0063dc;cursor:pointer;text-decoration:none;}.paginator a:visited {padding: 1px 6px; border: solid 1px #ddd; background: #fff; text-decoration: none .paginator .cpb {border:1px solid #F50;font-weight:700;color:#F50;background-color:#ffeee5;}.paginator a:hover {border:solid 1px #F50;color:#f60;text-decoration:none;}.paginator a,.paginator a:visited,.paginator .cpb,.paginator a:hover{float:left;height:16px;line-height:16px;min-width:10px;_width:10px;margin-right:5px;text-align:center white-space:nowrap;font-size:12px;font-family:Arial,SimSun;padding:0 3px;}说明:保存到css文件中,引用即可。
Scott Mitchell 的 2.0数据教程之二十四:: 分页和排序报表数据导言分页和排序是在WEB应用程序中展现数据常见的功能。
比如,当我们在一个网上书店搜索书籍的时候,可能有几百本相关书籍,但是我们只希望每页显示10条有效记录。
而且,我们还希望结果能根据标题、价格、页数和作者等等来进行排序。
过去的23个教程中我们研究了如何建立各种报表,包括在界面上添加编辑和删除数据。
但是我们没有研究如何对数据进行排序,对于分页我们也仅在研究DetailsView和FormView控件的时候看到。
Step 1:添加分页和排序页面在我们开始以前,首先让我们花些时间来添加包括本篇在内的最近四篇教程需要用到的页面。
我们先在项目中新建一个称作PagingAndSorting的文件夹,接下来,为目录新增以下几个页面,并配置为使用Site.master母板页。
∙Default.aspx∙SimplePagingSorting.aspx∙EfficientPaging.aspx∙SortParameter.aspx∙CustomSortingUI.aspx图1:创建一个PagingAndSorting文件夹并且添加教程的页面下一步,让我们打开Default.aspx 页面并且从UserControls 中拖拽SectionLevelTutorialListing.ascx 用户控件到设计界面。
我们在母板页和站点导航教程中创建的这个用户控件遍历站点地图并且以符号列表形式把它们呈现出来。
图2:把SectionLevelTutorialListing.ascx 用户控件加入Default.aspx要让显示我们将要创建的分页和排序教程,我们需要把他们加入站点地图中。
打开Web.sitemap 文件并且把下列代码加在“编辑、插入和删除”siteMapNode 标记之后:XML1 2 3 <siteMapNode title="Paging and Sorting" url="~/PagingAndSorting/Default.aspx"description="Samples of Reports that Provide Paging and Sorting Capabilities"><siteMapNode url="~/PagingAndSorting/SimplePagingSorting.aspx"4 5 6 7 8 910111213141516title="Simple Paging & Sorting Examples"description="Examines how to add simple paging and sorting support." /> <siteMapNode url="~/PagingAndSorting/EfficientPaging.aspx"title="Efficiently Paging Through Large Result Sets"description="Learn how to efficiently page through large result sets." /><siteMapNode url="~/PagingAndSorting/SortParameter.aspx"title="Sorting Data at the BLL or DAL"description="Illustrates how to perform sorting logic in the Business LogicLayer or Data Access Layer." /><siteMapNode url="~/PagingAndSorting/CustomSortingUI.aspx"title="Customizing the Sorting User Interface"description="Learn how to customize and improve the sorting user interface." /> </siteMapNode>图3:更新站点地图使之包含新的页面Step 2:在GridView中显示产品信息在我们真正实现分页和排序功能以前,让我们首先创建一个标准的,没有排序和分页功能的GridView来显示产品信息。
其实这个工作我们已经做过很多次了,大家也应该很熟悉了。
首先打开SimplePagingSorting.aspx页面并且从工具箱中拖一个GridView控件到设计器,配置它的ID属性为Products。
接着,新建一个ObjectDataSource并使用ProductsBLL类的GetProducts()方法来获取所有的产品信息。
图4:使用GetProducts()方法获取所有产品信息因为这个报表是只读的,我们不需要把ObjectDataSource的Insert(), Update(), 和 Delete()方法映射到相应的ProductsBLL方法,因此,对于UPDATE, INSERT, 和 DELETE页我们从下拉列表中选取(None)。
图5:对于UPDATE, INSERT, 和DELETE 页,我们从下拉列表中选择(None)选项下一步,让我们调整GridView 的字段使之只显示产品名、供应商、分类、价格和状态。
另外,我们可以尽管进行一些格式上的调整,比如配置价格的HeaderText 以符合我们的货币形式。
经过这些修改之后,我们的GridView 代码应该和下面的差不多:1 2 3 4 5 <asp:GridView ID="Products" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" DataSourceID="ObjectDataSource1" EnableViewState="False"><Columns><asp:BoundField DataField="ProductName" HeaderText="Product" SortExpression="ProductName" /> <asp:BoundField DataField="CategoryName" HeaderText="Category" ReadOnly="True"6 7 8 910111213SortExpression="CategoryName" /><asp:BoundField DataField="SupplierName" HeaderText="Supplier" ReadOnly="True" SortExpression="SupplierName" /><asp:BoundField DataField="UnitPrice" HeaderText="Price" SortExpression="UnitPrice" DataFormatString="{0:C}" HtmlEncode="False" /><asp:CheckBoxField DataField="Discontinued" HeaderText="Discontinued"SortExpression="Discontinued" /></Columns></asp:GridView>图6显示了在浏览器中的效果,但是注意到,我们在一个屏幕上显示产品。
显示了每个产品的名字、分类、供应商、价格和状态。
图6:每个产品都列出来了Step 3:添加分页支持在一个屏幕上列出所有的产品对于用户查看数据非常不方便。
要让结果更加可以管理,我们应该把数据分几个页面来呈现,并提供用户切换页面的功能。
要实现这个只需要选择GridView智能标签前的Paging复选框即可(其实就是把AllowPaging属性设置为true)。
图7:点击Enable Paging复选框来支持分页开启分页以后就能限制每页显示的记录数量并且在GridView中增加了分页导航。
默认如图7,是一系列页面的数字,运行用户快速从一个页面切换到另一个。
其实我们并不陌生,在为过去的教程中我们已经为DetailsView个FormView控件提供过分页支持。
Both the DetailsView and FormView controls only show a single record per page. The GridView, however, consults its PageSize property to determine how many records to show per page (this property defaults to a value of 10).DetailsView 和FormView 控件仅仅支持每一页显示一条记录。
但是对于GridView ,有一个PageSize 属性,能让我们配置每页显示的记录数(默认是设置为10)。
GridView, DetailsView 和 FormView 分页导航能使用下面的属性来配置:∙PagerStyle –指示分页导航的样式,能设置BackColor, ForeColor, CssClass, HorizontalAlign 等等。
∙ PagerSettings –包含大量属性来自定义分页导航的功能;PageButtonCount 代表显示在底部分页导航的最大页面数(默认为10);Mode 属性 代表分页操作的形式,能设置为:o NextPrevious –显示下一页和上一页按钮,让用户一次朝后或者朝前翻一页o NextPreviousFirstLast –除了下一页和上一页按钮外,还提供第一页和最后一页按钮,能让用户快速定位到首页或者末页数据o Numeric –显示一系列页面数字,让用户直接点击数字切换到相应页面o NumericFirstLast –除了页面数字以外还提供第一页和最后一页按钮,让用户能快速定位到首页或者末页数据,只有当没有显示首页或者末页数字时才显示按钮此外,GridView, DetailsView 和 FormView 还提供了PageIndex 和 PageCount 属性来指示当前呈现的页面和页面总数。