zoukankan      html  css  js  c++  java
  • asp.net自定义分页

           GridView也自带分页技术,但是这种方式值只用于小数量的数据,因为它是将整个查询内容一次性查出来加载在内存中,这样数据量大的话就会造成系统反应迟缓。但是对于Row_Nomber()来说数据量大的话确实是明智之举,但是小数量的话和一次性全部加载的效果差距不明显,所以在实际应用中还是根据实际情况来选择吧!

      下面来介绍用Row_Nomber()分页:

       代码很简单, 因为代码上已加了相应的注释,所以就再不多做代码解释,

      先编写分页用户控件:

      前台效果

      代码:

    View Code
    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl.ascx.cs" Inherits="control_WebUserControl"%>
    <asp:Table ID="Table1" runat="server" Width="100%">
    <asp:TableRow ID="TableRow1" runat="server">
    <asp:TableCell ID="TableCell0" runat="server"></asp:TableCell>
    <asp:TableCell ID="TableCell1" runat="server" Width="140px">
    <span>页次:</span><asp:Label ID="LabelMessage" runat="server" Text="1/1"></asp:Label></asp:TableCell>
    <asp:TableCell ID="TableCell2" runat="server" Width="30px">
    <asp:LinkButton ID="LinkButtonFirst" runat="server" OnClick="LinkButton_Click" CommandArgument="1"
    CommandName
    ="First" Enabled="False">首页</asp:LinkButton></asp:TableCell>
    <asp:TableCell ID="TableCell3" runat="server" Width="30px">
    <asp:LinkButton ID="LinkButtonPrevious" runat="server" OnClick="LinkButton_Click"
    CommandArgument
    ="1" CommandName="Previous" Enabled="False">上页</asp:LinkButton></asp:TableCell>
    <asp:TableCell ID="TableCell4" runat="server" Width="30px">
    <asp:LinkButton ID="LinkButtonNext" runat="server" OnClick="LinkButton_Click" CommandArgument="1"
    CommandName
    ="Next" Enabled="False">下页</asp:LinkButton></asp:TableCell>
    <asp:TableCell ID="TableCell5" runat="server" Width="30px">
    <asp:LinkButton ID="LinkButtonLast" runat="server" OnClick="LinkButton_Click" CommandArgument="1"
    CommandName
    ="Last" Enabled="False">末页</asp:LinkButton></asp:TableCell>
    <asp:TableCell ID="TableCell6" runat="server" Width="30px">
    <asp:LinkButton ID="LinkButtonGoto" runat="server" OnClick="LinkButton_Click" CommandArgument="1"
    CommandName
    ="Goto">转到</asp:LinkButton></asp:TableCell>
    <asp:TableCell ID="TableCell7" runat="server" Width="40px">
    <asp:TextBox ID="TextBoxPage" runat="server" Width="35px"></asp:TextBox></asp:TableCell>
    <asp:TableCell ID="TableCell8" runat="server" Width="20px">&nbsp;页</asp:TableCell>
    </asp:TableRow>
    </asp:Table>

    分页控件后台代码:

    View Code
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;

    publicpartialclass control_WebUserControl : System.Web.UI.UserControl
    {
    //设置条数数
    privateint pageCount =1;
    publicint PageCount
    {
    get
    {
    //先从ViewState中读取总页数,如果有总会页数的值,则将值返回,否则认为是一页
    if (ViewState["PageCount"] !=null)
    {
    return Convert.ToInt32(ViewState["PageCount"]);
    }
    else
    {
    return1;
    }
    }
    set
    {
    if (pageCount != value)
    {
    pageCount
    = value;
    ViewState[
    "PageCount"] = pageCount;
    ChangePage(currentPage);
    }
    }
    }
    //当前页数
    privateint currentPage =1;
    publicint CurrentPage
    {
    get
    {
    if (ViewState["CurrentPage"] !=null)
    {
    return Convert.ToInt32(ViewState["CurrentPage"]);
    }
    else
    {
    return1;
    }
    }
    set
    {
    if (currentPage != value)
    {
    currentPage
    = value;
    //将当前页数保存在 ViewState["CurrentPage"]
    ViewState["CurrentPage"] = currentPage;
    //设置按钮启用
    ChangePage(currentPage);
    }
    }
    }
    //总页数
    privateint recorderCount =1;
    publicint RecorderCount
    {
    get { return recorderCount; }
    set
    {
    recorderCount
    = value;
    PageCount
    = (recorderCount + PageSize -1) / PageSize;
    }
    }
    //每页数量
    privateint pageSize =1;
    publicint PageSize
    {
    get
    {
    if (ViewState["PageSize"] !=null)
    {
    return Convert.ToInt32(ViewState["PageSize"]);
    }
    else
    {
    return1;
    }
    }
    set
    {
    if (pageSize != value)
    {
    pageSize
    = value;
    //将总页数保存在ViewState["PageSize"] 中
    ViewState["PageSize"] = pageSize;
    ChangePage(currentPage);
    }
    }
    }

    ///<summary>
    /// 添加图层之前
    ///</summary>
    ///<param name="sender"></param>
    ///<param name="e"></param>
    //用委托添加添加ChangePage委托
    publicdelegatevoid PageChangedEventHandler(object sender, int e);
    //用委托改ChangePage添加委托
    publicevent PageChangedEventHandler PageChanged;
    protectedvirtualvoid OnPageChanged(int e)
    {
    //如果存在事件响应,则将当前点击的事件和页数传递
    if (PageChanged !=null)
    {
    PageChanged(
    this, e);
    }
    }

    protectedvoid Page_Load(object sender, EventArgs e)
    {
    if (!Page.IsPostBack)
    {
    //ViewState["CurrentPage"] = 1;
    //ViewState["PageCount"] = 1;
    }
    else
    {
    currentPage
    = Convert.ToInt32(ViewState["CurrentPage"]);
    pageCount
    = Convert.ToInt32(ViewState["PageCount"]);
    pageSize
    = Convert.ToInt32(ViewState["PageSize"]);
    }
    }
    protectedvoid LinkButton_Click(object sender, EventArgs e)
    {
    int iTmpCurrent =1;
    LinkButton myLinkButton
    = (LinkButton)sender;

    if (myLinkButton.CommandName =="First")
    {
    iTmpCurrent
    =1;
    }
    elseif (myLinkButton.CommandName =="Previous")
    {
    iTmpCurrent
    = currentPage -1;
    }
    elseif (myLinkButton.CommandName =="Next")
    {
    iTmpCurrent
    = currentPage +1;
    }
    elseif (myLinkButton.CommandName =="Last")
    {
    iTmpCurrent
    = pageCount;
    }
    elseif (myLinkButton.CommandName =="Goto")
    {
    int iGoto =1;
    if (int.TryParse(this.TextBoxPage.Text, out iGoto))
    {
    if (iGoto <=1)
    {
    iGoto
    =1;
    }
    if (iGoto > pageCount)
    {
    iGoto
    = pageCount;
    }
    iTmpCurrent
    = iGoto;
    }
    else
    {
    iTmpCurrent
    = currentPage;
    }

    }
    //iTmpCurrent要跳转的页数
    ChangePage(iTmpCurrent);
    //currentPage当前页数,点击事件触发
    OnPageChanged(currentPage);
    }
    //改变页数方法
    privatevoid ChangePage(int page)
    {
    currentPage
    = page;
    //加载热点商品推荐
    this.LinkButtonGoto.Enabled =true;

    if (page <=1)
    {
    this.LinkButtonFirst.Enabled =false;
    this.LinkButtonPrevious.Enabled =false;
    this.LinkButtonNext.Enabled =true;
    this.LinkButtonLast.Enabled =true;
    currentPage
    =1;
    }
    elseif (page >= pageCount)
    {
    this.LinkButtonFirst.Enabled =true;
    this.LinkButtonPrevious.Enabled =true;
    this.LinkButtonNext.Enabled =false;
    this.LinkButtonLast.Enabled =false;
    currentPage
    = pageCount;
    }
    else
    {
    this.LinkButtonFirst.Enabled =true;
    this.LinkButtonPrevious.Enabled =true;
    this.LinkButtonNext.Enabled =true;
    this.LinkButtonLast.Enabled =true;

    }
    if (pageCount <=1)
    {
    this.LinkButtonFirst.Enabled =false;
    this.LinkButtonPrevious.Enabled =false;
    this.LinkButtonNext.Enabled =false;
    this.LinkButtonLast.Enabled =false;
    this.LinkButtonGoto.Enabled =false;
    }
    //currentPage.ToString()当前页数。pageCount.ToString();总页数
    this.LabelMessage.Text = currentPage.ToString() +" / "+ pageCount.ToString();
    this.TextBoxPage.Text = currentPage.ToString();
    //将当前的页数保存在ViewState中
    ViewState["CurrentPage"] = currentPage;
    }
    }

    调用实现:

    View Code
    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;

    publicpartialclass learning : System.Web.UI.Page
    {
    protectedvoid Page_Load(object sender, EventArgs e)
    {
    //设置控件点击事件
    this.WebUserControl1.PageChanged +=new control_WebUserControl.PageChangedEventHandler(WebUserControl1_PageChanged);
    if (!Page.IsPostBack)
    {
    DataInit();
    DataLoad();
    }
    }

    void WebUserControl1_PageChanged(object sender, int e)
    {
    //加载事件
    DataLoad();
    }
    //根据查询数据,依据控件内的当前页数和每页数量和每页大小查询 并返回
    publicstring DataLoad()
    {
    string sql1 ="select ROW_NUMBER() over (order by NewsTimes) as RowNum,NewsTitle,NewsTimes,NewsURL,NewsTypeId,NewsContent,NewsId from News where NewsTypeId=2";
    string sql ="select * from ("+ sql1 +") As T where T.RowNum>"+ (this.WebUserControl1.CurrentPage -1) *this.WebUserControl1.PageSize +" And T.RowNum<="+this.WebUserControl1.CurrentPage *this.WebUserControl1.PageSize+"order by NewsTimes desc";
    return DataLoadTitle1(sql);
    }
    ///<summary>
    /// 返回资讯标题
    ///</summary>
    ///<param name="Sql"></param>
    ///<returns></returns>
    publicstaticstring DataLoadTitle1(string Sql)
    {
    Conndb.Conndb conn
    =new Conndb.Conndb();
    conn.Open();
    DataSet ds
    = conn.ExeSelectSql(Sql);
    string sa ="";
    string s, url, Time, s2, s1;

    foreach (DataRow dr in ds.Tables[0].Rows)
    {
    s
    = dr["NewsTitle"].ToString();
    url
    = dr["NewsUrl"].ToString();
    Time
    = Convert.ToDateTime(dr["NewsTimes"].ToString()).ToShortDateString();
    s1
    = dr["NewsTypeId"].ToString();
    s2
    = dr["NewsId"].ToString();
    sa
    +="<div class=\"newsbodynews\"><a href=\""+ url +"?NewsId="+ s2 +"&NewsTypeId="+ s1 +"\" target=\"_blank\">"+ s +"</a><span id=\"Span1\">【"+ Time +"】</span></div>";
    }
    return sa;
    ds.Dispose();
    }
    //初次加载是保存总页数
    privatevoid DataInit()
    {
    string Sql ="select * from News where NewsTypeid=2";
    //将数据总条数保存在用户控件
    this.WebUserControl1.PageCount = Methed.count(Sql);
    //将每页显示的数量保存在用户控件
    this.WebUserControl1.PageSize =2;
    }
    }
  • 相关阅读:
    BZOJ2962: 序列操作
    BZOJ2037: [Sdoi2008]Sue的小球
    LOJ#2537. 「PKUWC2018」Minimax
    LOJ#2538. 「PKUWC2018」Slay the Spire
    BZOJ4756 [USACO17JAN]Promotion Counting晋升者计数
    BZOJ2212——线段树合并
    atcoder.keyence2019.contest E-Connecting Cities
    [转载]笛卡尔树
    大数模板
    点分治
  • 原文地址:https://www.cnblogs.com/happygx/p/2044235.html
Copyright © 2011-2022 走看看