`
yake2011
  • 浏览: 18238 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

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即可。另外翻页时下拉列表框和显示信息栏的当前页同时更新

 



 

  • 大小: 55.9 KB
  • 大小: 7.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics