ASP.NET分页之自定义分页(假分页)

原文链接

 

本文来自 CSDN 博客 作者:Cici Cheng

 

自定义分页中主要是有比较复杂的逻辑内容,其实思想还是比较简单。具体示例如下:

页面源码:

 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>ASP.NET分页之自定义分页</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:DataList ID="DataList1" runat="server" DataKeyField="o_id" RepeatColumns="4"
            RepeatDirection="Horizontal">
            <ItemTemplate>
                <table>
                    <tr>
                        <td align="right">
                            编号:</td>
                        <td>
                            <%# Eval("o_id") %>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            县市名称:</td>
                        <td>
                            <%# Eval("o_name") %>
                        </td>
                    </tr>
                    <tr>
                        <td align="right">
                            市编号:</td>
                        <td>
                            <%# Eval("c_id") %>
                        </td>
                    </tr>
                </table>
            </ItemTemplate>
        </asp:DataList>
        <br />
        <table border="0" cellpadding="0" cellspacing="0">
            <tr>
                <td>
                    共<asp:Label ID="lblPageCount" runat="server" ForeColor="Red"></asp:Label>页, 当前第<asp:Label
                        ID="lblCurrPage" runat="server" ForeColor="Red"></asp:Label>页&nbsp;&nbsp; 共<asp:Label
                            ID="lblTotalCount" runat="server" ForeColor="Red"></asp:Label>条记录, 每页显示<asp:Label
                                ID="lblPageSize" runat="server" Text="16" ForeColor="Red"></asp:Label>条&nbsp;&nbsp;
                </td>
                <td>
                    <asp:LinkButton ID="btnFirst" runat="server" OnClick="btnFirst_Click">首页</asp:LinkButton>&nbsp;
                    <asp:LinkButton ID="btnPrev" runat="server" OnClick="btnPrev_Click">上一页</asp:LinkButton>&nbsp;
                    <asp:LinkButton ID="btnNext" runat="server" OnClick="btnNext_Click">下一页</asp:LinkButton>&nbsp;
                    <asp:LinkButton ID="btnLast" runat="server" OnClick="btnLast_Click">尾页</asp:LinkButton>&nbsp;
                    跳到<asp:DropDownList ID="ddlPager" runat="server" Width="50" OnSelectedIndexChanged="ddlPager_SelectedIndexChanged"
                        AutoPostBack="true" />
                    页
                </td>
            </tr>
        </table>
    </form>
</body>
</html>

 

 

 

后台代码:

 

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Configuration;

using System.Data;



public partial class Default2 : System.Web.UI.Page
{

    //页面加载时默认显示第一页

    protected void Page_Load(object sender, EventArgs e)
    {

        if (!IsPostBack)
        {

            BindPaging("1");

        }

    }



    //首页按钮被点击

    protected void btnFirst_Click(object sender, EventArgs e)
    {

        BindPaging("1");

    }



    //上一页页按钮被点击

    protected void btnPrev_Click(object sender, EventArgs e)
    {

        BindPaging("-1");

    }



    //下一页页按钮被点击

    protected void btnNext_Click(object sender, EventArgs e)
    {

        BindPaging("+1");

    }



    //尾页按钮被点击

    protected void btnLast_Click(object sender, EventArgs e)
    {

        BindPaging("0");

    }



    //下拉列表框选项发生改变

    protected void ddlPager_SelectedIndexChanged(object sender, EventArgs e)
    {

        BindPaging(ddlPager.Text);

    }



    private void BindPaging(string page)
    {

        SqlDataSource sqlds = new SqlDataSource();

        sqlds.ConnectionString = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;

        sqlds.SelectCommand = "SELECT * FROM [County]";

        sqlds.SelectCommandType = SqlDataSourceCommandType.Text;

        DataView dv = sqlds.Select(DataSourceSelectArguments.Empty) as DataView;



        int totalCount = dv.Count;//总条数

        int pageSize = 16;//每页显示条数

        int pageCount = (totalCount % pageSize == 0) ? (totalCount / pageSize) : (totalCount / pageSize + 1);//总页数

        int currPage; //当前页数

        //设置当前页

        switch (page)
        {

            //首页

            case "1":

                currPage = 1;

                break;

            //下一页

            case "+1":

                currPage = int.Parse(lblCurrPage.Text) + 1;

                break;

            //上一页

            case "-1":

                currPage = int.Parse(lblCurrPage.Text) - 1;

                break;

            //尾页

            case "0":

                currPage = pageCount;

                break;

            //下拉列表框直接传值时

            default:

                currPage = int.Parse(page);

                break;

        }



        //加载DropDownList项

        if (!IsPostBack)
        {

            for (int i = 1; i <= pageCount; i++)
            {

                ddlPager.Items.Add(i.ToString());

            }

        }



        //设置分页信息的显示

        lblCurrPage.Text = currPage.ToString();

        lblPageCount.Text = pageCount.ToString();

        lblPageSize.Text = pageSize.ToString();

        lblTotalCount.Text = totalCount.ToString();



        //设置翻页按钮的可用性

        btnFirst.Enabled = btnPrev.Enabled = btnNext.Enabled = btnLast.Enabled = true;

        if (currPage == 1)
        {

            btnFirst.Enabled = btnPrev.Enabled = false;

        }

        if (currPage == pageCount)
        {

            btnNext.Enabled = btnLast.Enabled = false;

        }

        ddlPager.Text = currPage.ToString();



        //从查询出的所有记录中筛选出即将呈现的当前页的数据集合

        int loopCount = (currPage == pageCount) ? totalCount - (currPage - 1) * pageSize : pageSize; //显示的记录条数

        DataRowView[] drwsToBind = new DataRowView[loopCount];

        for (int i = 0; i < loopCount; i++)
        {

            drwsToBind[i] = dv[(currPage - 1) * pageSize + i];

        }

        DataList1.DataSource = drwsToBind;

        DataList1.DataBind();

    }

}

 

预览效果

 



 

首页时"首页"和"上一页"按钮禁用,尾页时"下一页"和"尾页"按钮禁用。这里也可以将其隐藏,只需将btnFirst.Enabled=false改成btnFirst.Visible=false即可。另外翻页时下拉列表框和显示信息栏的当前页同时更新

 



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值