自己写DataPage分页

最近项目,手写了部分代码。

这个是ascx文件

public partial class DataPage : baseUserControl
    {
        #region 全局参数
        private int _indexPage;
        [Browsable(true)]
        public int IndexPage
        {
            get
            {
                if (ViewState["index"] != null)
                {
                    _indexPage = int.Parse(ViewState["index"].ToString());
                }
                return _indexPage;
            }
            set
            {
                ViewState["index"] = value;
                TextBoxPage.Text = value.ToString();
                _indexPage = value;
            }
        }

        private int _pageSize;
        [Browsable(true)]
        public int PageSize
        {
            get
            {
                if (ViewState["pagesize"] == null)
                    _pageSize = Convert.ToInt32(DropDownListPageSize.SelectedItem.Value);
                else
                {
                    _pageSize = Convert.ToInt32(ViewState["pagesize"].ToString());
                }
                DropDownListPageSize.SelectedValue = _pageSize.ToString();
                return _pageSize;
            }
            set
            {
                ViewState["pagesize"] = value;
                _pageSize = value;
            }
        }

        private int _pageTotal;
        [Browsable(false)]
        public int PageTotal
        {
            get
            {
                if (ViewState["pagetotal"] != null)
                {
                    _pageTotal = int.Parse(ViewState["pagetotal"].ToString());
                }

                return _pageTotal;
            }
            set
            {
                ViewState["pagetotal"] = value;
                _pageTotal = value;
            }
        }

        private int _pageRecords;
        [Browsable(false)]
        public int PageRecords
        {
            get
            {
                if (ViewState["pagerecords"] != null)
                {
                    _pageRecords = int.Parse(ViewState["pagerecords"].ToString());
                }
                return _pageRecords;
            }
            set
            {
                ViewState["pagerecords"] = value;
                litTotalRecord.Text = value.ToString();
                _pageRecords = value;
            }
        }

        private object _pageControl;
        [Browsable(false)]
        public object PageControl
        {
            get
            {
                if (_pageControl == null) _pageControl = new object();
                if (PageControl is Repeater)
                {
                    Repeater rpt = (Repeater)PageControl;
                    _rptControl = rpt;
                }
                else if (PageControl is GridView)
                {
                    GridView gv = (GridView)PageControl;
                }
                return _pageControl;
            }
            set { _pageControl = value; }
        }

        private object _pageDataSource;
        [Browsable(false)]
        public object PageDataSource
        {
            get { return _pageDataSource; }
            set { _pageDataSource = value; }
        }

        private Repeater _rptControl;
        [Browsable(false)]
        public Repeater RptControl
        {
            get
            {
                if (_rptControl == null) _rptControl = new Repeater();
                return _rptControl;
            }
            set { _rptControl = value; }
        }

        public delegate void bindData(int pageSize, int pageIndex);

        private bindData _bindDelegate;
        [Browsable(false)]
        public bindData BindDelegate
        {
            get
            {
                if (Session["bindDelegate"] != null)
                {
                    _bindDelegate = new bindData((bindData)Session["bindDelegate"]);
                }
                return _bindDelegate;
            }
            set { _bindDelegate = value; }
        }
        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            LabelNumberOfPages.Text = PageTotal.ToString();
            setImgButtonStatus();
        }

        protected void DropDownListPageSize_SelectedIndexChanged(object sender, EventArgs e)
        {
            IndexPage = 1;
            reBindData();
        }

        private void reBindData()
        {
            PageSize = Convert.ToInt32(DropDownListPageSize.SelectedItem.Value);
            BindDelegate(PageSize, IndexPage);
            int total = PageTotal;
            LabelNumberOfPages.Text = PageTotal.ToString();
            setImgButtonStatus();
        }

        protected void ImageButtonNext_Command(object sender, CommandEventArgs e)
        {
            if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Next")
            {
                IndexPage = IndexPage + 1;
                BindDelegate(PageSize, IndexPage);
                setImgButtonStatus();
                //this.Page.Response.Redirect(HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath);
            }
            else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Prev")
            {
                IndexPage = IndexPage - 1;
                if (IndexPage != 0)
                    BindDelegate(PageSize, IndexPage);
                setImgButtonStatus();
            }
            else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "First")
            {
                IndexPage = 1;
                BindDelegate(PageSize, IndexPage);
                setImgButtonStatus();
            }
            else if (e.CommandName == "Page" && e.CommandArgument.ToString() == "Last")
            {
                IndexPage = PageTotal;
                BindDelegate(PageSize, IndexPage);
                setImgButtonStatus();
            }
        }

        private void setImgButtonStatus()
        {
            if (IndexPage == PageTotal)
            {
                ImageButtonNext.Visible = false;
                ImageButtonLast.Visible = false;
            }
            else
            {
                ImageButtonNext.Visible = true;
                ImageButtonLast.Visible = true;
            }

            if (IndexPage == 1)
            {
                ImageButtonFirst.Visible = false;
                ImageButtonPrev.Visible = false;
            }
            else
            {
                ImageButtonFirst.Visible = true;
                ImageButtonPrev.Visible = true;
            }
            TextBoxPage.Text = IndexPage.ToString();
        }

        //protected void TextBoxPage_TextChanged(object sender, EventArgs e)
        
//{
        
//    IndexPage = Convert.ToInt32(TextBoxPage.Text.Trim());
        
//    reBindData();
        
//}
    }

接着是分页的逻辑调用。效果类似SQL的SP

/// <summary>
        
/// 
        
/// </summary>
        
/// <param name="pageRecordCount">一共多少条记录</param>
        
/// <param name="pageTotal">一共多少页</param>
        
/// <param name="pageSize">每页显示记录数</param>
        
/// <param name="pageIndex">当前页索引</param>
        
/// <returns></returns>
        public IQueryable GetQCHistoryView(out int pageRecordCount, out int pageTotal, int pageSize, int pageIndex)
        {
            pageRecordCount = InspectionHistoryDAL.DB.VW_QCInspectionHistory.Count();
            int resut = 1;
            pageTotal = Math.DivRem(pageRecordCount, pageSize, out resut);

            if (resut != 0)
            {
                pageTotal = pageTotal + 1;
            }
            int startIndex = pageIndex == 0 ? pageIndex : pageSize * (pageIndex - 1);

            //动态生成查询表达式
            if (startIndex <= 0)
            {
                return InspectionHistoryDAL.DB.VW_QCInspectionHistory
                    .OrderByDescending(c => c.HistoryID).Take(pageSize);
            }
            else
            {
                IQueryable iq = InspectionHistoryDAL.DB.VW_QCInspectionHistory.Skip<VW_QCInspectionHistory>(startIndex).Take(pageSize);
                return iq;
            }
        }

然后看页面如何调用

protected override void OnInit(EventArgs e)
        {
            BindData(DataPage1.PageSize, 1);
            Session[TagName.SESSION_BINDDELEGATE] = new FMS.DynamicData.Content.DataPage.bindData(BindData);
        }


        public void BindData(int pageSize, int pageIndex)
        {
            try
            {
                IQueryable iq = _bo.GetQCHistoryView(out pageSum, out  totalPage, pageSize, pageIndex);
                DataPage1.PageTotal = totalPage;
                DataPage1.IndexPage = pageIndex;
                DataPage1.PageSize = pageSize;
                DataPage1.PageRecords = pageSum;
                rptHistory.DataSource = iq;
                rptHistory.DataBind();
            }
            catch (Exception ce)
            {
                Console.WriteLine(ce.ToString());
            }
        }
原文地址:https://www.cnblogs.com/drek_blog/p/2236506.html