【Asp.Net WebFrom】分页
Asp.Net WebForm 分页
一、 前言
Asp.Net WebForm 内置的DataPager让人十分蛋疼
本文使用的分页控件是第三方分页控件 AspNetPager,下载地址:
链接: http://pan.baidu.com/s/1eQJ2HR8 密码: aost
相关属性及其效果图:
二、使用第三方分页控件 AspNetPager
第一步:显示未分页前的数据
前端代码:
注意:将ListView控件的EnableViewState="False"。说明即使是EnableViewState="False",不影响分页的实现。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListView分页AspNetPager第三方控件.aspx.cs" Inherits="Focus.Asp.WebForm.Czbk.Focus.ListView.ListView分页AspNetPager第三方控件" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:ListView ID="ListView1" runat="server" EnableViewState="False"> <%--asp.net 3.5的LayoutTemplate是必须的,asp.net 4.0的LayoutTemplate不是必须的--%> <LayoutTemplate> <div style="border:solid seagreen;"> <table> <thead> <tr> <th>Id</th> <th>种类</th> </tr> </thead> <tbody> <%--显示写LayoutTemplate时必须有一个占位符(可以是任意类型), 但是id必须是itemPlaceholder,项占位符控件还必须指定 runat="server"。--%> <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder> </tbody> </table> </div> </LayoutTemplate> <ItemTemplate> <div> <tr> <td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td> <td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td> </tr> </div> </ItemTemplate> <AlternatingItemTemplate> <div > <tr> <td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td> <td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td> </tr> </div> </AlternatingItemTemplate> <EmptyDataTemplate> 抱歉,没有数据 </EmptyDataTemplate> </asp:ListView> </div> </form> </body> </html>
后台代码绑定数据:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } private void BindData() { List<Electronics> dataSource = DataSourceTemplete.GetElectronics(); this.ListView1.DataSource = dataSource; this.ListView1.DataBind(); }
其中 用静态类DataSourceTemplete来模拟数据源,数据源的结构类是Electronics,它们的代码如下:
DataSourceTemplete.cs:
using System; using System.Collections.Generic; using System.Data.Entity.Migrations.Model; using System.Linq; using System.Threading; using System.Web; using Focus.Asp.WebForm.Czbk.Focus.ValidateControl; namespace Focus.Asp.WebForm.Czbk.Focus.Helper { public static class DataSourceTemplete { private static List<Electronics> electronics = new List<Electronics>() { //new Electronics{Id = -1, Kind="--请选择--"}, new Electronics{Id = 1, Kind="电脑"}, new Electronics{Id = 2, Kind="手机"}, new Electronics{Id = 3, Kind="平板电脑"}, new Electronics{Id = 4, Kind="一体机"}, new Electronics{Id = 5, Kind="路由器"}, new Electronics{Id = 6, Kind="吹风机"}, new Electronics{Id = 7, Kind="CPU"}, new Electronics{Id = 8, Kind="散热器"}, new Electronics{Id = 9, Kind="主板"}, new Electronics{Id = 10, Kind="内存条"}, }; public static List<Electronics> GetElectronics() { return electronics; } public static void Add(Electronics electronic) { electronics.Add(electronic); } public static void Delete(int id) { var toDel = electronics.First(i => i.Id == id); electronics.Remove(toDel); } public static void Edit(Electronics electronic) { var toEdit = electronics.First(i => i.Id == electronic.Id); toEdit.Kind = electronic.Kind; } public static Electronics Get(int id) { return electronics.First(i => i.Id == id); } } }
Electronics.cs:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Focus.Asp.WebForm.Czbk.Focus.ValidateControl { public class Electronics { public int Id { get; set; } public string Kind { get; set; } } }
第二步:添加分页控件
先在项目中引入AspNetPager.dll;
前端代码中添加添加分页控件,
<%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="aspNetPager" %> .... <form id="form1" runat="server"> <div> <asp:ListView ID="ListView1" runat="server" EnableViewState="False"> ..... </asp:ListView> <div> <aspNetPager:AspNetPager runat="server" ID="AspNetPager1" AlwaysShow="True" OnPageChanged="AspNetPager1_OnPageChanged" UrlPaging="True" NumbericButtonCount ="5" NumericButtonTextFormatString="[{0}]" ShowCustomInfoSection="Right" ShowPrevNext="True" ShowPageIndex="True" ShowFirstLast="True" FirstPageText="首页" LastPageText="末页" PrevPageText="上一页" NextPageText="下一页" ShowNavigationToolTip="True" TextBeforeInputBox="第" ShowInputBox=‘Always‘ TextAfterInputBox="页" SubmitButtonText="确认"> </aspNetPager:AspNetPager> </div> </div> </form>
第三步:为分页控件添加OnPageChanged事件处理:
其中,第一步中BindData();也相应的添加相关代码,以实现分页相关逻辑。
后台代码:
private int pageIndex; private int pageSize = Convert.ToInt32(ConfigurationManager.AppSettings["pageSize"]); private int totalCount; ........ protected void AspNetPager1_OnPageChanged(object sender, EventArgs e) { BindData(); /*设置分页控件属性*/ this.AspNetPager1.CustomInfoHTML = "记录总数:<b>" + AspNetPager1.RecordCount.ToString() + "</b>"; this.AspNetPager1.CustomInfoHTML += " 总页数:<b>" + AspNetPager1.PageCount.ToString() + "</b>"; this.AspNetPager1.CustomInfoHTML += " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>"; } private void BindData() { List<Electronics> dataSource = DataSourceTemplete.GetElectronics(); pageIndex = this.AspNetPager1.CurrentPageIndex; totalCount = DataSourceTemplete.GetElectronics().Count; this.ListView1.DataSource = dataSource.Skip(pageIndex-1 * pageSize) .Take(pageSize) .ToList(); ; this.ListView1.DataBind(); /*设置分页控件属性*/ this.AspNetPager1.RecordCount = totalCount;//所有数据的总数,必须设置该值。 this.AspNetPager1.PageSize = pageSize; }
其中,在web.config文件中配置PageSize(每页显示多少项数据):
<configuration> <appSettings> <add key="pageSize" value="2"/> </appSettings>
并通过如下代码获取:
private int pageSize = Convert.ToInt32(ConfigurationManager.AppSettings["pageSize"]);
页面完整代码:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListView分页AspNetPager第三方控件.aspx.cs" Inherits="Focus.Asp.WebForm.Czbk.Focus.ListView.ListView分页AspNetPager第三方控件" %> <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix="aspNetPager" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:ListView ID="ListView1" runat="server" EnableViewState="False"> <%--asp.net 3.5的LayoutTemplate是必须的,asp.net 4.0的LayoutTemplate不是必须的--%> <LayoutTemplate> <div style="border:solid seagreen;"> <table> <thead> <tr> <th>Id</th> <th>种类</th> </tr> </thead> <tbody> <%--显示写LayoutTemplate时必须有一个占位符(可以是任意类型), 但是id必须是itemPlaceholder,项占位符控件还必须指定 runat="server"。--%> <asp:PlaceHolder runat="server" ID="itemPlaceholder"></asp:PlaceHolder> </tbody> </table> </div> </LayoutTemplate> <ItemTemplate> <div> <tr> <td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td> <td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td> </tr> </div> </ItemTemplate> <AlternatingItemTemplate> <div > <tr> <td><asp:Label runat="server"><%#Eval("Id") %></asp:Label></td> <td><asp:Label runat="server"><%#Eval("Kind") %></asp:Label></td> </tr> </div> </AlternatingItemTemplate> <EmptyDataTemplate> 抱歉,没有数据 </EmptyDataTemplate> </asp:ListView> <div> <aspNetPager:AspNetPager runat="server" ID="AspNetPager1" AlwaysShow="True" OnPageChanged="AspNetPager1_OnPageChanged" UrlPaging="True" NumbericButtonCount ="3" NumericButtonTextFormatString="[{0}]" ShowCustomInfoSection="Right" ShowPrevNext="True" ShowPageIndex="True" ShowFirstLast="True" FirstPageText="首页" LastPageText="末页" PrevPageText="上一页" NextPageText="下一页" ShowNavigationToolTip="True" TextBeforeInputBox="第" ShowInputBox=‘Always‘ TextAfterInputBox="页" SubmitButtonText="确认"> </aspNetPager:AspNetPager> </div> </div> </form> </body> </html>
后台完整代码:
using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Focus.Asp.WebForm.Czbk.Focus.Helper; using Focus.Asp.WebForm.Czbk.Focus.ValidateControl; namespace Focus.Asp.WebForm.Czbk.Focus.ListView { public partial class ListView分页AspNetPager第三方控件 : System.Web.UI.Page { private int pageIndex; private int pageSize = Convert.ToInt32(ConfigurationManager.AppSettings["pageSize"]); private int totalCount; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { BindData(); } } protected void AspNetPager1_OnPageChanged(object sender, EventArgs e) { BindData(); /*设置分页控件属性*/ this.AspNetPager1.CustomInfoHTML = "记录总数:<b>" + AspNetPager1.RecordCount.ToString() + "</b>"; this.AspNetPager1.CustomInfoHTML += " 总页数:<b>" + AspNetPager1.PageCount.ToString() + "</b>"; this.AspNetPager1.CustomInfoHTML += " 当前页:<font color=\"red\"><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>"; } private void BindData() { List<Electronics> dataSource = DataSourceTemplete.GetElectronics(); pageIndex = this.AspNetPager1.CurrentPageIndex; totalCount = DataSourceTemplete.GetElectronics().Count; this.ListView1.DataSource = dataSource.Skip(pageIndex-1 * pageSize) .Take(pageSize) .ToList(); ; this.ListView1.DataBind(); /*设置分页控件属性*/ this.AspNetPager1.RecordCount = totalCount;//所有数据的总数,必须设置该值。 this.AspNetPager1.PageSize = pageSize; } } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。