首页 > 代码库 > 【Asp.Net WebFrom】分页

【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>
View Code

  后台代码绑定数据:

        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);        }    }}
View Code

  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; }    }}
View Code

 

  第二步:添加分页控件

  先在项目中引入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=http://www.mamicode.com/"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>
View Code

        后台完整代码:

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;        }    }}
View Code