zoukankan      html  css  js  c++  java
  • 【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="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
  • 相关阅读:
    [日常摸鱼]UVA393 The Doors 简单计算几何+最短路
    [日常摸鱼]bzoj3122 [Sdoi]2013 随机数生成器
    [日常摸鱼]积性函数求和——杜教筛
    [OI笔记]NOIP2017前(退役前)模拟赛的总结
    [日常摸鱼]poj2417 DiscreteLoggingBSGS算法
    [日常摸鱼]UVA11424&11426 GCD Extreme
    [日常摸鱼]JSOI2008最大数
    [日常摸鱼]HDU1724 Ellipse自适应Simpson法
    原码、补码、反码的作用和区别
    Fibonacci序列or兔子序列
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3895551.html
Copyright © 2011-2022 走看看