ASP.NET的Web网页如何进行分页操作(Demo举例)

本文介绍了一个使用ASP.NET和C#实现的音乐管理后台系统,重点讲解了如何通过LINQ进行数据分页,展示了完整的前后端代码示例,包括按钮操作、数据加载和分页逻辑。

大概说一下思路,可以利用sql的 Offset/Fetch Next分页,点击这里
这里的Demo利用LINQ的写好的方法

//这里是某个表的列表   skip是跳过前面的多少条数据   take这是跳过前面的数据后显示多少条数据
db.Albums.ToList().Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();

我们是四个按钮一个首页,上一页,下一页,尾页,点击跳转
有不明白的,或者小编描述错误的模糊的欢迎评论私信

这个页面的前台页面

<%@ Page Title="" Language="C#" MasterPageFile="~/Admin/AdminSite.Master" AutoEventWireup="true" CodeBehind="MusicManager.aspx.cs" Inherits="WebApplication1.Admin.MusicManager1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

    <link href="../Assets/css/input.css" rel="stylesheet" />
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

    <div class="pure-form">
        <fieldset>
            <%--genres表--%>
            <legend>后台管理<i class="fa fa-angle-double-right"></i>音乐管理
                <asp:Button ID="Button1" runat="server" CssClass="button-default pure-button-primary tools-button" Text="添加音乐" OnClick="Button1_Click" />
            </legend>
        </fieldset>
    </div>
    <table class="pure-table">
        <thead>
            <tr>
                <th>#</th>
                <th>音乐名称</th>
                <th>歌手名称</th>
                <th>标题</th>
                <th>单价</th>
                <th>图片</th>
                <th>编辑</th>
            </tr>
        </thead>
        <tbody>
            <asp:Repeater ID="Repeater1" runat="server" OnItemCommand="Repeater1_ItemCommand">
                <ItemTemplate>
                    <tr>
                        <td><%# Eval("AlbumId") %></td>
                        <td><%# Eval("Genres.Name") %></td>
                        <td><%# Eval("Artists.Name") %></td>
                        <td><%# Eval("Title") %></td>
                        <td><%# Eval("Price") %></td>
                        <td><%#  Eval("AlbumArtUrl") %><asp:Image ID="Image1" ImageUrl='<%# "~"+Eval("AlbumArtUrl") %>' runat="server" Width="40px" Height="40px" /></td>
                        <td>
                            <asp:LinkButton ID="LinkButton1" CssClass="button-default pure-button-primary" runat="server" CommandArgument='<%#Eval("AlbumId") %>' CommandName="Edit">编辑</asp:LinkButton>
                            <asp:LinkButton ID="LinkButton2" CssClass="button-default  button-error" runat="server" CommandArgument='<%#Eval("AlbumId") %>' CommandName="Delete">删除</asp:LinkButton></td>

                    </tr>
                </ItemTemplate>
            </asp:Repeater>
            <tr>
                <td colspan="6">
                    <asp:Label ID="Label1" runat="server"></asp:Label>
                    <asp:Button ID="btnFirst" runat="server" Text="首页" OnClick="btnFirst_Click" />
                    <asp:Button ID="btnPrev" runat="server" Text="上页" OnClick="btnPrev_Click" />
                    <asp:Button ID="btnNext" runat="server" Text="下页" OnClick="btnNext_Click" />
                    <asp:Button ID="btnLast" runat="server" Text="尾页" OnClick="btnLast_Click" />


                </td>
            </tr>
        </tbody>



    </table>
</asp:Content>

这个页面的后台页面

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using WebApplication1.BLL;
using WebApplication1.DAL;

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

        protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e)
        {
            string str = e.CommandName.ToString();
            //这里获取id,我的id是刚才我赋值的时候CommandArgument是赋值的id
            int id = Convert.ToInt32(e.CommandArgument.ToString());
            //using (OLMSDBEntities oLMSDB = new OLMSDBEntities())
            //{


            // var gener = oLMSDB.Genres.FirstOrDefault(t => t.GenreId == id);
            if (str == "Delete")
            {

                //后面是对数据库的操作,可以忽略
                //    oLMSDB.Genres.Remove(gener);
                bool flag_deleteMussicType = BLL.MusicManager.deleteMusicManager(id);


                if (flag_deleteMussicType)
                {
                    string strUrl = "<script>alert('删除成功');window.location.href='MusicManager.aspx'</script>";
                    Response.Write(strUrl);
                }
                else
                {
                    string strUrl = "<script>alert('删除失败');</script>";
                    Response.Write(strUrl);
                }
            }
            else if (str == "Edit")
            {
                Response.Redirect($"Edit_MusicManager.aspx?id={id}");

            }
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Redirect("Add_MusicManager.aspx");
        }
      


		//分页的具体代码



        //页码
        public int pageNumber
        {
            //取值的话,如果里面没有就说明第一次进入,然后给它赋值,下面在取值
            get
            {
                if (ViewState["page"] == null)
                {
                    return 1;
                }
                else
                {
                    return Convert.ToInt32(ViewState["page"]);
                }
            }
            set
            {
                ViewState["page"] = value;
            }
        }
        //每页的记录数
        public int pageSize
        {
            get
            {
                return 5;
            }
        }
        //总页数
        public int pageCount
        {
            get
            {
                if (ViewState["count"] == null)
                {
                    return 1;
                }
                else
                {
                    return Convert.ToInt32(ViewState["count"]);
                }
            }
            set
            {
                ViewState["count"] = value;
            }
        }


        public void LoadData()
        {
            using (OLMSDBEntities oLMSDB = new OLMSDBEntities())
            {                          //这里是某个表的列表      skip是跳过前面的多少条数据         take这是跳过前面的数据后显示多少条数据
                                       //     //这里是我需要显示第三页的数据,我们要跳过二页的数据,所以是(3-1)*一页的数据量
                Repeater1.DataSource = oLMSDB.Albums.ToList().Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
                Repeater1.DataBind();
                pageCount = oLMSDB.Albums.ToList().Count;
                Label1.Text = $"每页{pageSize}条,共{pageCount}条    ";
                //我们最后剩下一行数据也要在加一页,如果有余数就要加一页
                pageCount = pageCount % pageSize == 0 ? pageCount / pageSize : pageCount / pageSize + 1;
            }
            Label1.Text += "当前页数为" + pageNumber + "/" + pageCount;
        }

        //首页
        protected void btnFirst_Click(object sender, EventArgs e)
        {
            pageNumber = 1;
            LoadData();
        }

        //上一页
        protected void btnPrev_Click(object sender, EventArgs e)
        {
            //防止到0页,如果到0页的话,我们就是到1页
            pageNumber = pageNumber - 1 < 1 ? pageNumber = 1 : pageNumber - 1;

            LoadData();
        }

        //下一页
        protected void btnNext_Click(object sender, EventArgs e)
        {
            //防止超出所有的页面总数,超出的话,就赋值页面总数
            pageNumber = pageNumber + 1 > pageCount ? pageNumber = pageCount : pageNumber + 1;
            LoadData();
        }

        //尾页
        protected void btnLast_Click(object sender, EventArgs e)
        {
            pageNumber = pageCount;
            LoadData();
        }
    }
}

效果图

在这里插入图片描述

1、支持通过Url进行分页AspNetPager除提供默认的类似于DataGrid和GridView的PostBack分页方式外,还支持通过Url进行分页,象大多数asp程序中分页一样, Url分页方式允许用户通过在浏览器地址栏中输入相应的地址即可直接进入指定页面,也可以使搜索引擎搜索到所有分页的页面的内容,因此具有用户友好和搜索引擎友好的优点,关于Url分页PostBack分页方式的差异,请参考UrlPostBack分页方式的对比。 2、支持Url分页方式下的Url重写(UrlRewrite)功能 Url重写技术可以使显示给用户的Url不同于实际的Url,Url重写技术被广泛应用于搜索引擎优化(SEO)、网站重组后重定向页面路径以及提供用户友好的Url等方面, AspNetPager支持Url重写技术使您可以自定义分页导航的Url格式,实现Url重写; 3、支持使用用户自定义图片做为导航元素: 您可以使用自定义的图片文件做为分页控件的导航元素,而不仅仅限于显示文字内容。 4、功能强大灵活、使用方便、可定制性强: AspNetPager分页控件的所有导航元素都可以由用户进行单独控制,从6.0版起,AspNetPager支持使用主题(Theme)皮肤(Skin)统一控件的整体样式,配合asp.net 2.0中的DataSource控件,AspNetPager只需要编写短短几行代码,甚至无需编写任何代码,只需设置几个属性就可以实现分页功能。 5、增强的 Visual Studio 2005/2008设计时支持 增强的设计时支持使控件在设计时更加直观,易于使用,开发快捷方便。 6、兼容IE6.0+及FireFox 1.5+等浏览器 7、丰富而完整的控件文档和示例项目: 控件附带的完整的帮助文档及示例项目能够帮助您快速上手,熟悉AspNetPager控件的使用,您还可以通过给作者留言以及论坛提问等方式解决控件使用中遇到的问题。 Demo的主要功能有: 基本功能 分页按钮属性效果 使用自定义信息区 居中当前页索引按钮 Repeater分页 DataList分页 Url分页 使用Url重写技术 Url逆向分页 N层结构应用 使用XML文件数据源 图片浏览示例 使用AccessDataSource 使用SqlDataSource 使用ObjectDataSource 自定义数据呈现逻辑 使用图片按钮 查询结果分页 查询结果Url分页 克隆属性及事件 页索引输入/选择框 自定义导航按钮 在用户控件中实现分页
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值