• 自己写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());
                }
            }
  • 相关阅读:
    前后端反爬虫的一些奇怪姿势【转载】
    Scrapy 中常用的中间件和管道组件
    Jquery各个版本的区别
    userAgent
    操作系统
    手机类别
    移动端设备UA检测
    iPhone6的CSS3媒体查询
    所有设备的CSS像素
    解读所有设备的css像素的网站
  • 原文地址:https://www.cnblogs.com/drek_blog/p/2236506.html
Copyright © 2020-2023  润新知