zoukankan      html  css  js  c++  java
  • 简易自定义分页

    本来想写成自定义控件的,觉得麻烦,并且暂时没有太多的时间来弄这个。就偷懒,写了个用户控件将就用。

    用户控件的html部分

    <div style="text-align: right; height: 20px">
        <table style="display: inline; float: right;">
            <tr>
                <td style=" 35px">
                    <asp:LinkButton ID="BTN_First" runat="server" Text="首页" CommandArgument="First" OnClick="BTN_Pager_Click" />
                </td>
                <td style=" 35px">
                    <asp:LinkButton ID="BTN_Pre" runat="server" Text="上页" CommandArgument="Pre" OnClick="BTN_Pager_Click" />
                </td>
                <td style=" 35px">
                    <asp:LinkButton ID="BTN_Next" runat="server" Text="下页" CommandArgument="Next" OnClick="BTN_Pager_Click" />
                </td>
                <td style=" 35px">
                    <asp:LinkButton ID="BTN_End" runat="server" Text="尾页" CommandArgument="End" OnClick="BTN_Pager_Click" />
                </td>
            </tr>
        </table>
        <div style="float: right; margin-right: 10px;">
            <asp:TextBox ID="TB_GoTo" runat="server" Width="25px"></asp:TextBox>
            <asp:Button ID="BTN_GoTo" runat="server" Text="跳" Height="25px" OnClick="BTN_GoTo_Click" /></div>
        <div style="float: right; margin-right: 10px;">
            当前是第<asp:Literal ID="L_PageIndex" Text="1" runat="server" />/<asp:Literal ID="L_PageCount"
                Text="0" runat="server" />页</div>
        <div style="float: right; margin-right: 10px;">
            共有<asp:Literal ID="L_RecordCount" Text="0" runat="server" />条记录</div>
        <div style="float: right; margin-right: 10px;">
            每页<asp:Literal ID="L_PageSize" Text="10" runat="server" />条记录</div>
    </div>
    
    

    用户控件的后台部分。

    定义了一个委托,调用外部根据数据源进行绑定数据的方法,以便在不同的分页应用到不同的场合。

    namespace Fireice.Edo.Web.UserControl
    {
        public delegate void PagerDataTable(DataTable dt);
        public partial class Pager : System.Web.UI.UserControl
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                    BoundData();
    
                DIV_Pager.Attributes.Add("style", _style);
                //text-align: right; margin-right:40px; margin-bottom:20px; height: 20px
            }
    
    
            public PagerDataTable PagerDataTableHander;
    
            public string TableName
            {
                get
                {
                    if (ViewState["TableName"] == null)
                        throw new Exception("没有指定表名");
                    else
                        return ViewState["TableName"].ToString();
                }
                set { ViewState["TableName"] = value; }
            }
    
            public string OrderField
            {
                get
                {
                    if (ViewState["OrderField"] == null)
                        throw new Exception("没有指定排序的字段");
                    return ViewState["OrderField"].ToString();
                }
                set { ViewState["OrderField"] = value; }
            }
    
            public string WherePart
            {
                get { return ViewState["WherePart"] == null ? String.Empty : ViewState["WherePart"].ToString(); }
                set { ViewState["WherePart"] = value; }
            }
    
            public OrderDirect OrderDirect
            {
                get
                {
                    if (ViewState["OrderDirect"] == null)
                        return OrderDirect.ASC;
                    return (OrderDirect)Enum.Parse(typeof(OrderDirect), ViewState["OrderDirect"].ToString());
                }
                set { ViewState["OrderDirect"] = value; }
            }
    
            public DatabaseType DatabaseType
            {
                get
                {
                    if (ViewState["DatabaseType"] == null)
                        return DatabaseType.MySql;
                    return (DatabaseType)Enum.Parse(typeof(DatabaseType), ViewState["DatabaseType"].ToString());
                }
                set { ViewState["DatabaseType"] = value; }
            }
    
            private void BoundData()
            {
                string tableName = TableName;
                string orderField = OrderField;
                string orderDirect = OrderDirect.ToString();
    
                Fireice.Edo.Helper.DB.DBHelper db = new Fireice.Edo.Helper.DB.DBHelper();
                //db.GetDataTable();
                int count = Convert.ToInt32(db.GetSingleFieldBySQL("select count(*) from " + tableName + " " + WherePart + " "));
                RecordCount = count;
                PageCount = AccountPageCount(PageSize, RecordCount);
                string sql = String.Empty;
                switch (DatabaseType)
                {
                    case DatabaseType.MySql:
                        sql = " select * from " + tableName + " " + WherePart + " order by " + orderField + " " + orderDirect + " limit " + (PageIndex - 1) * PageSize + "," + PageSize + " ";
                        break;
                    case DatabaseType.SqlServer2000:
                        sql = " SELECT TOP " + PageSize + " * FROM " + tableName + " WHERE (" + orderField + " NOT IN (SELECT TOP " + PageSize * (PageIndex - 1) + " " + orderField + " FROM " + tableName + " ORDER BY " + orderField + " " + orderDirect + ")) ORDER BY " + orderField + " " + orderDirect + " ";
                        break;
                }
    
                DataTable dt = db.GetDataTable(sql);
    
                if (PagerDataTableHander != null)
                    PagerDataTableHander(dt);
                //_gv.DataSource = dt;
                //_gv.DataBind();
            }
    
    
    
            private void ControlState()
            {
                if (PageCount <= 1)
                {
                    TB_GoTo.Enabled = false;
                    BTN_GoTo.Enabled = false;
                }
                else
                {
                    BTN_GoTo.Enabled = true;
                }
    
                if (PageIndex == 1 || PageIndex == 0)
                {
                    BTN_First.Enabled = false;
                    BTN_Pre.Enabled = false;
                }
                else
                {
                    BTN_First.Enabled = true;
                    BTN_Pre.Enabled = true;
                }
    
                if (PageIndex == PageCount)
                {
                    BTN_Next.Enabled = false;
                    BTN_End.Enabled = false;
                }
                else
                {
                    BTN_Next.Enabled = true;
                    BTN_End.Enabled = true;
                }
            }
    
            protected override void OnPreRender(EventArgs e)
            {
                base.OnPreRender(e);
                ControlState();
            }
    
    
            /// <summary>
            /// 每页显示的记录数
            /// </summary>
            public int PageSize
            {
                get { return Convert.ToInt32(L_PageSize.Text); }
                set { L_PageSize.Text = value.ToString(); }
            }
    
            /// <summary>
            /// 总记录数
            /// </summary>
            public int RecordCount
            {
                get { return Convert.ToInt32(L_RecordCount.Text); }
                set { L_RecordCount.Text = value.ToString(); }
            }
    
            /// <summary>
            /// 当前是第几页
            /// </summary>
            public int PageIndex
            {
                get { return Convert.ToInt32(L_PageIndex.Text); }
                set { L_PageIndex.Text = value.ToString(); }
            }
    
            /// <summary>
            /// 总页数
            /// </summary>
            public int PageCount
            {
                get { return Convert.ToInt32(L_PageCount.Text); }
                set { L_PageCount.Text = value.ToString(); }
            }
    
            /// <summary>
            /// 根据总记录数和每页显示的页数计算出总页数
            /// </summary>
            /// <param name="pageSize"></param>
            /// <param name="recordCount"></param>
            /// <returns></returns>
            private int AccountPageCount(int pageSize, int recordCount)
            {
                if (pageSize == 0 || recordCount == 0)
                    return 0;
                else
                {
                    if (recordCount % pageSize == 0)
                    {
                        return recordCount / pageSize;
                    }
                    else
                    {
                        return recordCount / pageSize + 1;
                    }
                }
            }
    
            protected void BTN_Pager_Click(object sender, EventArgs e)
            {
                string command = ((LinkButton)sender).CommandArgument;
                switch (command)
                {
                    case "First":
                        {
                            PageIndex = 1;
                            break;
                        }
                    case "Pre":
                        {
                            PageIndex--;
                            break;
                        }
                    case "Next":
                        {
                            PageIndex++;
                            break;
                        }
                    case "End":
                        {
                            PageIndex = PageCount;
                            break;
                        }
                }
                BoundData();
            }
    
            protected void BTN_GoTo_Click(object sender, EventArgs e)
            {
                string pageNumber = TB_GoTo.Text;
                int goToPageNumber = 0;
                bool check = true;
                check = Int32.TryParse(pageNumber, out goToPageNumber);
                if (goToPageNumber <= 0 || goToPageNumber > PageCount)
                {
                    check = false;
                }
                if (check)
                {
                    PageIndex = goToPageNumber;
                    BoundData();
                }
                else
                {
                    string key = "PagerErrorkey";
                    if (!Page.ClientScript.IsStartupScriptRegistered(key))
                    {
                        Page.ClientScript.RegisterStartupScript(this.GetType(), key, "alert('输入的跳转页数格式不正确或超出范围!');", true);
                    }
                }
            }
    
            private string _style;
            public string Style
            {
                set { _style = value; }
            }
    
    
        }
    
        public enum OrderDirect
        {
            DESC, ASC
        }
    
    
    
        public enum DatabaseType
        {
            SqlServer2000,
            MySql
        }
    }


    具体的使用如下:

            protected void Page_Load(object sender, EventArgs e)
            {
                Pager1.TableName = "accessrecord";
                Pager1.OrderDirect = Fireice.Edo.Web.UserControl.OrderDirect.DESC;
                Pager1.OrderField = "Recordtime";
                Pager1.PageSize = 20;
                Pager1.Style = "text-align: right; margin-right:10px; margin-top:10px;margin-bottom:20px; height: 20px";
                Pager1.DatabaseType = Fireice.Edo.Web.UserControl.DatabaseType.MySql;
                Pager1.PagerDataTableHander += new Fireice.Edo.Web.UserControl.PagerDataTable(BoundGV);
    
            }
    
            private void BoundGV(DataTable dt)
            {
                GridView1.DataSource = dt;
                GridView1.DataBind();
            }
    
  • 相关阅读:
    【转帖】C#索引器
    .NET Framework升级的挑战
    【我翻译的文章】CodeSmith发布代替和扩展LINQ to SQL的工具——PLINQO
    升级到VS2008后的一些疑惑
    【我翻译的文章】你还需要数据层吗?
    Db4Objects发布Db4o 7.0,支持透明激活
    迎接游戏开发新世界——Zune Game和Micro Game
    20071223成都俱乐部活动
    db4o发布7.2,出现.NET 3.5版本,支持LINQ
    微软推出SCE SDK及其示例MSDN Reader
  • 原文地址:https://www.cnblogs.com/fireicesion/p/1780613.html
Copyright © 2011-2022 走看看