一次性读取数据的分页控件

<%@ Control Language="C#" AutoEventWireup="true" Codebehind="ucCachePager.ascx.cs"
    Inherits="H3cChinesePortal.UserControl.ucCachePager" %>
<table width="100%" align="center" class="ucpage">
    <tr id="FootBar" align="center" runat="server" name="FootBar">
        <td align="left">
        </td>
        <td align="right">
            <asp:ImageButton ID="btnFirst" runat="server" CssClass="inpingbut11" ImageUrl="../image/first_on.gif">
            </asp:ImageButton>
            <asp:ImageButton ID="btnPrev" runat="server" CssClass="inpimgbut6" ImageUrl="../image/previous_on.gif">
            </asp:ImageButton>
            <font face="宋体">第<asp:Label ID="lbPageLabel" runat="server" Font-Size="9pt" ForeColor="navy"></asp:Label>页
            </font>
            <asp:ImageButton ID="btnNext" runat="server" CssClass="inpimgbut6" ImageUrl="../image/next_on.gif">
            </asp:ImageButton>
            <asp:ImageButton ID="btnLast" runat="server" CssClass="inpingbut11" ImageUrl="../image/last_on.gif">
            </asp:ImageButton>
            <font color="navy" size="2">
                <asp:TextBox ID="txtPageIndex" runat="server" Width="26px" Height="16" οnkeypress="return event.keyCode>=48&amp;&amp;event.keyCode<=57||(this.value.indexOf('.')<0?event.keyCode==46:false)"
                    οnpaste="return !clipboardData.getData('text').match(//D/)" Style="border: #ccc 1px solid;
                    height: 18px; font-size: 11px;"></asp:TextBox>
                <asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ErrorMessage="必须为数字"
                    Display="Dynamic" ControlToValidate="txtPageIndex" ValidationExpression="/d*$"
                    EnableClientScript="False"></asp:RegularExpressionValidator>
                <asp:Button ID="btnGo" runat="server" Text="跳 转" CssClass="inpsubmit"></asp:Button>
            </font>
        </td>
    </tr>
</table>

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace H3cChinesePortal.UserControl
{
    public partial class ucCachePager : System.Web.UI.UserControl
    {
        /// <summary>
        /// 当前页索引SessionName
        /// </summary>
        private string SESSIONNAME_CURRENTPAGEINDEX = "dgShow_CurrentPageIndex";
        /// <summary>
        /// 总页数SessionName
        /// </summary>
        private string SESSIONNAME_PAGES = "dgShow_Pages";


        private DataRow[] drsSource = null;

        private string filter = string.Empty;

        public string Filter
        {
            set
            {
                this.filter = value;
            }
        }
        #region [要绑定的控件]

        private object bindControl = null;
        /// <summary>
        /// 要绑定的DataGrid控件
        /// </summary>
        public object BindControl
        {
            set
            {
                this.bindControl = value;
            }
        }
        #endregion

        #region[页大小]
        private int pageSize = 20;
        /// <summary>
        /// 页大小
        /// </summary>
        public int PageSize
        {
            set
            {
                this.pageSize = value;
            }
            get
            {
                return this.pageSize;
            }
        }
        #endregion

        /// <summary>
        /// 总页数
        /// </summary>
        private int pages = 1;
        public int Pages
        {
            get
            {
                if (Session[SESSIONNAME_PAGES] != null)
                {
                    this.pages = int.Parse(Session[SESSIONNAME_PAGES].ToString());
                }

                return this.pages;
            }
        }

        #region[当前页]
        private int currentPageIndex = 1;


        /// <summary>
        ///  当前页
        /// </summary>
        public int CurrentPageIndex
        {
            get
            {
                if (Session[SESSIONNAME_CURRENTPAGEINDEX] != null)
                {
                    currentPageIndex = (int)Session[SESSIONNAME_CURRENTPAGEINDEX];
                }

                return this.currentPageIndex;
            }

        }
        #endregion


        #region[数据源]
        private DataTable dtSource = null;

        /// <summary>
        /// 数据源
        /// </summary>
        public DataTable Source
        {
            set
            {
                this.dtSource = value;
            }
        }
        #endregion

        #region[排序字段]
        /// <summary>
        /// 排序字段,如:order by ID desc
        /// </summary>
        private string orderByString = string.Empty;
        public string OrderByString
        {
            set
            {
                orderByString = value;
            }
        }
        #endregion

        private void Page_Load(object sender, System.EventArgs e)
        {
            // 在此处放置用户代码以初始化页面
            if (!IsPostBack)
            {
                SESSIONNAME_CURRENTPAGEINDEX = this.ID + SESSIONNAME_CURRENTPAGEINDEX;
                SESSIONNAME_PAGES = this.ID + SESSIONNAME_PAGES;

                Session[SESSIONNAME_CURRENTPAGEINDEX] = 1;
                Session[SESSIONNAME_PAGES] = 1;
            }
        }

        #region[取总行数]
        /// <summary>
        /// 取总行数
        /// </summary>
        /// <returns></returns>
        private int GetRows()
        {
            int rows = this.drsSource.Length;
            return rows;
        }
        #endregion

        #region[取页数]
        /// <summary>
        /// 取页数
        /// </summary>
        /// <returns></returns>
        private int GetPages()
        {
            int rows = GetRows();

            this.pages = rows / this.pageSize;

            int leave = rows % this.pageSize;

            if (leave > 0)
            {
                this.pages++;
            }

            if (this.pages == 0)
            {
                this.pages = 1;
            }
            Session[SESSIONNAME_PAGES] = this.pages;

            return this.pages;
        }
        #endregion

        #region[显示行页信息]
        /// <summary>
        /// 显示行数
        /// </summary>
        private void ShowRows()
        {
            int rows = GetRows();
            //int rowsOfCurrentPage = this.dsSource.Tables[0].Rows.Count;

            //   string pageLabel = "Current page:<STRONG><FONT color=/"red/">{0}</FONT></STRONG>rows,total:<STRONG><FONT color=/"red/">"+
            //       "{1}</FONT></STRONG>rows,<STRONG><FONT color=/"red/">{2}</FONT></STRONG>/<STRONG><FONT color=/"red/">{3}</FONT></STRONG>pages";
            //
            //   this.lbPageLabel.Text = string.Format(pageLabel,rowsOfCurrentPage.ToString(),rows.ToString(),this.CurrentPageIndex.ToString(),this.Pages.ToString());

            this.lbPageLabel.Text = string.Format("{0}/{1}", this.currentPageIndex.ToString(), this.pages.ToString());
        }

        #endregion

        #region[重新查询事件]
        /// <summary>
        /// 重新查询事件
        /// </summary>
        public event EventHandler fresh;

        /// <summary>
        /// 重新查询事件
        /// </summary>
        /// <param name="e"></param>
        protected void OnFresh(EventArgs e)
        {
            if (this.fresh != null)
            {
                fresh(this, e);
            }
        }

        #endregion

        #region[数据绑定]
        /// <summary>
        /// 数据绑定
        /// </summary>
        public void BindDg()
        {

            DataTable dt = this.dtSource;

            this.drsSource = dt.Select(this.filter, this.orderByString);


            GetPages();
            ShowRows();
            IniButton();
            Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;

            string controlType = this.bindControl.GetType().Name;
            if (controlType == "GridView")
            {
                GridView dg = ((GridView)bindControl);
                dg.DataSource = GetCurrentPage().DefaultView;
                dg.DataBind();
            }
            else if (controlType == "Repeater")
            {
                Repeater rpt = ((Repeater)bindControl);
                rpt.DataSource = GetCurrentPage().DefaultView;
                rpt.DataBind();
            }
            else
            {

            }

            this.txtPageIndex.Text = (CurrentPageIndex).ToString();

        }

        #endregion

        #region Web 窗体设计器生成的代码
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            //
            InitializeComponent();
            base.OnInit(e);
        }

        /// <summary>
        ///  设计器支持所需的方法 - 不要使用代码编辑器
        ///  修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.btnFirst.Click += new System.Web.UI.ImageClickEventHandler(this.btnFirst_Click);
            this.btnPrev.Click += new System.Web.UI.ImageClickEventHandler(this.btnPrev_Click);
            this.btnNext.Click += new System.Web.UI.ImageClickEventHandler(this.btnNext_Click);
            this.btnLast.Click += new System.Web.UI.ImageClickEventHandler(this.btnLast_Click);
            this.btnGo.Click += new System.EventHandler(this.btnGo_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        #region[首页]
        /// <summary>
        /// 首页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnFirst_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.currentPageIndex = 1;
            Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
            OnFresh(EventArgs.Empty);
        }
        #endregion

        #region[上一页]
        /// <summary>
        /// 上一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnPrev_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.currentPageIndex = CurrentPageIndex;

            if (this.currentPageIndex > 1)
            {
                this.currentPageIndex--;
            }

            Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;

            OnFresh(EventArgs.Empty);
        }
        #endregion

        #region[下一页]
        /// <summary>
        /// 下一页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnNext_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.currentPageIndex = CurrentPageIndex;

            this.pages = Pages;
            if (this.currentPageIndex < this.pages)
            {
                this.currentPageIndex++;

                this.SetPreOn(true);
            }
            Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;

            OnFresh(EventArgs.Empty);
        }
        #endregion

        #region[末页]
        /// <summary>
        /// 末页
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnLast_Click(object sender, System.Web.UI.ImageClickEventArgs e)
        {
            this.currentPageIndex = CurrentPageIndex;
            this.pages = Pages;

            this.currentPageIndex = this.pages;

            Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;

            OnFresh(EventArgs.Empty);
        }

        #endregion

        private void IniButton()
        {

            if (this.Pages == 1)//只有一页时,所有按按钮禁用
            {
                this.SetFirstOn(false);
                this.SetLastOn(false);
                this.SetNextOn(false);
                this.SetPreOn(false);
                this.btnGo.Enabled = false;
                this.txtPageIndex.Enabled = false;
                return;
            }

            if (this.currentPageIndex == 1)
            {
                this.SetFirstOn(false);
                this.SetLastOn(true);
                this.SetNextOn(true);
                this.SetPreOn(false);
                this.btnGo.Enabled = true;
                this.txtPageIndex.Enabled = true;
                return;
            }

            if (this.currentPageIndex < this.Pages)//由于=1的情况上面已经处理,这里相等代表是最后一页
            {
                this.SetFirstOn(true);
                this.SetPreOn(true);
                this.SetNextOn(true);
                this.SetLastOn(true);
                this.btnGo.Enabled = true;
                this.txtPageIndex.Enabled = true;
            }
            else
            {
                this.SetFirstOn(true);
                this.SetPreOn(true);
                this.SetNextOn(false);
                this.SetLastOn(false);
                this.btnGo.Enabled = true;
                this.txtPageIndex.Enabled = true;
            }
        }
        #region[设置按钮的状态]
        private void SetFirstOn(bool setValue)
        {
            if (setValue == true)
            {
                this.btnFirst.ImageUrl = "../image//first_on.gif";
                btnFirst.Enabled = true;
            }
            else
            {
                this.btnFirst.ImageUrl = "../image//first_off.gif";
                btnFirst.Enabled = false;
            }
        }

        private void SetNextOn(bool setValue)
        {
            if (setValue == true)
            {
                this.btnNext.ImageUrl = "../image//next_on.gif";
                btnNext.Enabled = true;
            }
            else
            {
                this.btnNext.ImageUrl = "../image//next_off.gif";
                btnNext.Enabled = false;
            }
        }

        private void SetLastOn(bool setValue)
        {
            if (setValue == true)
            {
                this.btnLast.ImageUrl = "../image//last_on.gif";
                btnLast.Enabled = true;
            }
            else
            {
                this.btnLast.ImageUrl = "../image//last_off.gif";
                btnLast.Enabled = false;
            }
        }

        private void SetPreOn(bool setValue)
        {
            if (setValue == true)
            {
                this.btnPrev.ImageUrl = "../image//previous_on.gif";
                btnPrev.Enabled = true;
            }
            else
            {
                this.btnPrev.ImageUrl = "../image//previous_off.gif";
                btnPrev.Enabled = false;
            }
        }
        #endregion

        #region[跳转]
        /// <summary>
        /// 跳转
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnGo_Click(object sender, System.EventArgs e)
        {
            this.currentPageIndex = CurrentPageIndex;
            this.pages = Pages;

            this.txtPageIndex.Text.Trim().Replace(" ", "").Replace(" ", "");
            if (this.txtPageIndex.Text == string.Empty)
            {
                this.txtPageIndex.Text = "1";
            }
            if (!Page.IsValid)
            {
                return;
            }

            this.currentPageIndex = int.Parse(this.txtPageIndex.Text);
            if (this.currentPageIndex < 1)
            {
                this.currentPageIndex = 1;
            }
            if (this.currentPageIndex > this.pages)
            {
                this.currentPageIndex = this.pages;
            }

            Session[SESSIONNAME_CURRENTPAGEINDEX] = this.currentPageIndex;
            OnFresh(EventArgs.Empty);

        }
        #endregion

        #region[清空]
        public void Clear()
        {
            Session[SESSIONNAME_CURRENTPAGEINDEX] = null;
            //Session[SESSIONNAME_PAGES] = null;
            //this.dtSource = null;

        }
        #endregion


        #region[取当前页数据]
        private DataTable GetCurrentPage()
        {
            int beginIndex = this.pageSize * (this.currentPageIndex - 1);
            int endIndex = this.pageSize * this.currentPageIndex;

            if (endIndex > this.GetRows())//开始大于行数时
            {
                endIndex = this.GetRows();
            }

            DataTable dtNew = this.dtSource.Copy();
            dtNew.Clear();

            DataRow[] drs = (DataRow[])this.drsSource;
            for (int i = beginIndex; i < endIndex; i++)
            {
                object[] row = drs[i].ItemArray;

                dtNew.Rows.Add(row);
            }


            dtNew.AcceptChanges();
            return dtNew;
        }
        #endregion
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值