ASP.NET的分页方法(一)

要做一个关于分页写法的专题,这是今天的第一讲,自制分页,可能有些代码需要优化,希望大家给出一些中肯的建议

前台使用的repeater绑定的数据:

<form id="form1" runat="server">
        <div>
            <ul style="list-style: none">
                <asp:Repeater ID="Repeater1" runat="server">
                    <ItemTemplate>
                        <li><%#Eval("Title") %></li>
                    </ItemTemplate>
                </asp:Repeater>
            </ul>
        </div>

        <div id="pagerwrapper">
            <table id="pager" cellspacing="0">
                <tbody>
                    <tr>
                        <td colspan="5">
                            <%=RePager %>
                            跳转至:<asp:TextBox ID="TxtPager" runat="server"></asp:TextBox>页
                            <asp:Button ID="BtnOk" runat="server" Text="确定" OnClick="BtnOk_Click" />
                        </td>
                    </tr>
                </tbody>
            </table>
        </div>
    </form>

后台代码写法如下:注释已标明:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace WebApplication1
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if(!IsPostBack)
            {
                GetDate();

            }
            //这样写可以避免第一次加载之后再次加载不显示的问题
            GetPager();
        }
        string ConStr = ConfigurationManager.ConnectionStrings["Connection"].ToString();

        public string pager = string.Empty;
        public string RePager = string.Empty;
        int startcount = 0;
        int endcount = 0;
        //绑定数据源
        public void GetDate()
        {
            if (Request.QueryString["pager"] != null)
            {
                string GetDateSql = "SELECT TOP " + 10 + " * FROM ( SELECT ROW_NUMBER() over(order by id) as pid,*FROM [Info]) AS aa where aa.pid>=" + Request.QueryString["pager"] + "";

                using (SqlConnection conn = new SqlConnection(ConStr))
                {
                    conn.Open();
                    DataSet dt = new DataSet();
                    SqlDataAdapter sdt = new SqlDataAdapter(GetDateSql, conn);
                    sdt.Fill(dt);
                    this.Repeater1.DataSource = dt;
                    this.Repeater1.DataBind();
                }
            }
            else        //初次加载不传入任何页码,默认显示前十条
            {
                string GetDateSql = "SELECT TOP " + 10 + " * FROM ( SELECT ROW_NUMBER() over(order by id) as pid,*FROM [Info]) AS aa ";

                using (SqlConnection conn = new SqlConnection(ConStr))
                {
                    conn.Open();
                    DataSet dt = new DataSet();
                    SqlDataAdapter sdt = new SqlDataAdapter(GetDateSql, conn);
                    sdt.Fill(dt);
                    this.Repeater1.DataSource = dt;
                    this.Repeater1.DataBind();
                }
            }

        }
        //得到页码
        public void GetPager()
        {
            string GetTotal = "SELECT COUNT(*) FROM [Info]";
            using (SqlConnection conn = new SqlConnection(ConStr))
            {
                conn.Open();
                SqlCommand comm = new SqlCommand(GetTotal,conn);
                int i = Convert.ToInt32(comm.ExecuteScalar());
                int totalPageNum = (i + 10 - 1) / 10;//一共的页数
                int j = 0;//记录当前页
                string FirstPager = string.Empty;//首页
                string LastPager = string.Empty;//尾页

                string NextPager = string.Empty;//下一页
                string PrePager = string.Empty;//上一页

                int next = 0;//记录下一页页码
                int pre = 0;//记录上一页页码

                for (j = 1; j <= totalPageNum; j++)
                {
                    //Request.QueryString["value"]接受的是页码值
                    if (Request.QueryString["value"] == null)
                    {
                        startcount = (1 + 5) > totalPageNum ? totalPageNum - 9 : 1 - 4;//中间页起始序号
                        //中间页终止序号
                        endcount = 1 < 5 ? 10 : 1 + 5;
                        if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
                        if (totalPageNum < endcount) { endcount = totalPageNum; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
                    }
                    else
                    {
                        startcount = (int.Parse(Request.QueryString["value"]) + 5) > totalPageNum ? totalPageNum - 9 : int.Parse(Request.QueryString["value"]) - 4;//中间页起始序号
                        //中间页终止序号
                        endcount = int.Parse(Request.QueryString["value"]) < 5 ? 10 : int.Parse(Request.QueryString["value"]) + 5;
                        if (startcount < 1) { startcount = 1; } //为了避免输出的时候产生负数,设置如果小于1就从序号1开始
                        if (totalPageNum < endcount) { endcount = totalPageNum; } //页码+5的可能性就会产生最终输出序号大于总页码,那么就要将其控制在页码数之内
                    }
                }

                if (Request.QueryString["value"] == null)
                {
                    next = 1 + 1;
                    pre = 1;
                }
                else
                {
                    next = int.Parse(Request.QueryString["value"]) + 1;
                    pre = int.Parse(Request.QueryString["value"]) - 1;
                    //判断并进行越界处理
                    if(pre<=0)
                    {
                        pre = 1;
                    }
                    if(next>totalPageNum)
                    {
                        next = totalPageNum;
                    }
                }

                for (j = startcount; j <= endcount; j++)
                {
                    if (Request.QueryString["value"]==null)
                    {
                        pager += "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + 10 * (1 - 1) + "&value=" + 1 + "\">" + j + "</a>|";
                    }
                    else if (int.Parse(Request.QueryString["value"]) == j)
                    {
                        pager += "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + 10 * (j - 1) + "&value=" + j + "\"><span style=\"color:red\">" + j + "</span></a>|";
                    }
                    else
                    {
                        //10 * (j - 1)这个公式的意思是(当前页码-1)*10,可以跳转到对应页码查看相关的数据
                        pager += "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + 10 * (j - 1) + "&value=" + j + "\">" + j + "</a>|";
                    }
                }

                FirstPager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + 10 * (1 - 1) + "&value=" + 1 + "\"> 首页</a>|";
                LastPager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + 10 * (totalPageNum - 1) + "&value=" + totalPageNum + "\"> 尾页</a>|";
                NextPager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + 10 * (next - 1) + "&value=" + next + "\"> 下一页</a>|";
                PrePager = "<a class=\"hrefName\" href=\"WebForm2.aspx?pager=" + 10 * (pre - 1) + "&value=" + pre + "\"> 上一页</a>|";

                RePager = FirstPager + PrePager+ pager + NextPager + LastPager;//拼凑字符串
            }
        }
        //跳转到第几页的方法
        protected void BtnOk_Click(object sender, EventArgs e)
        {
            if (Request.QueryString["value"] == null)
            {
                Response.Redirect("WebForm2.aspx?pager=" + 10 * (Convert.ToInt32(this.TxtPager.Text) - 1)+"&value=" + this.TxtPager.Text );
            }
        }
    }
}
时间: 2024-10-06 21:39:43

ASP.NET的分页方法(一)的相关文章

asp.net数据分页方法

/// <summary> /// 数据分页方法 /// </summary> /// <param name="PageIndex">当前页</param> /// <param name="PageSize">每页显示数量</param> /// <param name="PageCount">总数据</param> /// <param n

ASP.NET的分页方法(二)

第二讲主要使用到了常用的分页控件aspnetpager,这里对他就行一个简单的应用,具体大家可以到杨涛的博客上去寻找相关的DLL, 首先要先引用AspNetPager.dll,然后把这个DLL同时添加入工具箱 接下来前台依然使用repeater控件进行绑定,写法如下: <form id="form1" runat="server"> <div> <ul style="list-style: none"> <

ASP.NET的分页方法(四)

这是我早先得到的一段JS代码,只需要修改一下开头的几个参数,就可以使用,不知道能否试用于静态页面呢,大家可以尝试一下 <script language="javascript"> var obj, j; var page = 0; var nowPage = 0;//当前页 var listNum = 3;//每页显示<ul>数 var PagesLen;//总页数 var PageNum = 4;//分页链接接数(5个) onload = function (

ASP.NET的分页方法(三)

第三讲是应用于MVC上面的分页,很多时候MVC要和EF表达式一起使用,但是我这个使用的最原始的ADO.NET,一样实现了这个效果.要实现这个效果首先要得到MvcPager.dll,引用之后,前台操作如下: @using Webdiyer.WebControls.Mvc; @model PagedList<MVCTest.Models.Info> <!DOCTYPE html> <html> <head> <meta name="viewpor

ASP.NET中分页显示

分页详解,ASP.NET书本  "数据空间应用" (1)使用GridView控件分页显示 步奏:1.添加GridView控件 2.将GrideView控件的AllowPaging属性设置为True,表示允许分页  3.将PageSize属性设置一个数字,用来控制每页中显示的记录数 4.最后在GridView控件的PageIndexChanging事件中设置GridView控件的PageIndex属性为当前页的索引值,并重新绑定GridView控件 (2)DataList控件中的数据 u

ASP.NET MVC 分页MvcPager

ASP.NET MVC 分页MvcPager 开源框架  admin  8个月前 (08-20)  1484浏览 他连续12年获得微软MPV称号,几年前,他写的ASP.NET分页控件,被很多.NET开发人员使用,现在他又写了名为MvcPager的分页扩展,并免费开源,支持MVC通用分页,与EF完美结合,支持AJAX分页,简单灵活,提供多个演示案例,是迄今为止最好的MVC分页方式,推荐各位ASP.NET MVC开发者使用. 分页是每个项目必须面对的技术点,不好的分页不但体验不好,而且会影响系统的整

Asp.Net MVC 分页、检索、排序整体实现

原文:Asp.Net MVC 分页.检索.排序整体实现 很多时候需要这样的功能,对表格进行分页.排序和检索.这个有很多实现的方式,有现成的表格控件.用前端的mvvm,用户控件.但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意.这里自己实现一次,功能不是高大全,但求一个清楚明白,也欢迎园友拍砖.前端是bootstrap3+jPaginate,后台基于membership.没什么难点. 先上效果图. 分页其实就是处理好 每页项目数.总项目数.总页数.当前页.为了方便复用,就先从仓库开始说起

asp网络编程:ASP中实现分页显示的七种武器

在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便.自由.而在Visual InterDev6.0(以下简称VI6.0)中,由于Script Object Model(以下简称SOM).Design-Time Control(以下简称DTC)以及Data Environment Object Model(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便. 因为主题方面的原因,关于

ASP.NET MVC分页实现之改进版-增加同一个视图可设置多个分页

我之前就已经实现了ASP.NET MVC分页(查看该博文),但它有局限性,必须确保在同一个视图中只能有一处分页,若需要在同一个视图中设置多个分页,却无能为力,为此,我重新对原先的代码进行了优化,增加了更为灵活的配置属性及生成规则,解决了上述问题,代码如下: 一.PageInfo类 using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace ROIS.Models {