pager

using System;
using System.ComponentModel;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SZHome.MobileBBS.WebControlLibrary
{
    /// <summary>
    /// 分页控件
    /// 事件:1.点击数字 ----跳到指定数字(pageIndex)页
    /// 2.点击省略号 -------显示上(下)页数字  layerIndex--(layerIndex++)
    /// 3.点击箭头   -------上(下)翻页  pageIndex--(pageIndex++)
    /// </summary>
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:PagerControl runat=server></{0}:PagerControl>")]
    public class PagerControl : WebControl        
    {
        private Int32 pageIndex=1;//当前页
        private Int32 layerIndex=1;// 数字页
        private Int32 pageCount=10 ;//一次显示多少页
        private string numberCss="";// 数字的样式
        private Int32 numberCount=0; //当前页显示的数字数
        private string url;//翻页页面url
        private string preVisible = "visible";//前翻是否呈现
        private string nextVisible = "visible";//后翻是否呈现
        private string preNumVisible = "visible";
        private string nextNumVisible = "visible";
        private Int32 rCount=0;//记录数
        private Int32 pageSize=20;//每页显示记录条数
        [Bindable(true), Category("自定义设置"), DefaultValue(""),Browsable(true),Description("设置翻页数字样式")]       
        public string NumberCss
        {
            get
            {
                String s = (String)ViewState["NumberCss"];
                return ((s == null) ? String.Empty : s);
            }

            set
            {
                numberCss = value;
                ViewState["NumberCss"] = numberCss;
            }
        }
        [Browsable(false), Category("自定义设置"),DefaultValue(1),Description("当前页")]
        public Int32 PageIndex
        {
            get
            {
                if (ViewState["PageIndex"] == null)
                {
                    ViewState["PageIndex"] = this.pageIndex;
                }
                return ViewState["PageIndex"] == null ? this.pageIndex : (Int32)ViewState["PageIndex"];
            }
            set
            {
                pageIndex=value;
                ViewState["PageIndex"] = pageIndex;
            }
        }
        [Browsable(false),DefaultValue(1)]
        public Int32 LayerIndex
        {
            get
            {
                if (ViewState["LayerIndex"] == null)
                {
                    ViewState["LayerIndex"] = this.layerIndex;
                }
                return ViewState["LayerIndex"] == null ? this.layerIndex : (Int32)ViewState["LayerIndex"];
            }
            set
            {
                layerIndex=value;
                ViewState["LayerIndex"] = layerIndex;
;
            }
        }

        [Browsable(true), Category("自定义设置"), DefaultValue(10), Description("一次显示的数字数")]
        public Int32 PageCount
        {
            get
            {
                if (ViewState["PageCount"] == null)
                {
                    ViewState["PageCount"] = this.pageCount;
                }
                return ViewState["PageCount"] == null ? this.pageCount : (Int32)ViewState["PageCount"];
            }
            set
            {
                pageCount=value;
                ViewState["PageCount"] = pageCount;
            }
        }
        [Browsable(false),DefaultValue(10),Description("当前页显示的数字数")]
        public Int32 NumberCount
        {
            get
            {
                if (ViewState["NumberCount"] == null)
                {
                    ViewState["NumberCount"] = this.numberCount;
                }
                return ViewState["NumberCount"] == null ? this.numberCount : (Int32)ViewState["NumberCount"];
                
            }
            set
            {
                numberCount = value;
                ViewState["NumberCount"] = numberCount;
            }
        }
        [Browsable(true), DefaultValue(""), Description("翻页页面")]
        public string Url
        {
            get
            {
                String s = (String)ViewState["Url"];
                return ((s == null) ? String.Empty : s);
            }

            set
            {
                url = value;
                ViewState["Url"] = url;
            }
        }
        [Browsable(false),DefaultValue(false)]
        public string PreVisible
        {
            get
            {
                String s = (String)ViewState["PreVisible"];
                return ((s == null) ? "visible" : s);
            }

            set
            {
                preVisible = value;
                ViewState["PreVisible"] = preVisible;
            }

        }
        [Browsable(false), DefaultValue(true)]
        public string NextVisible
        {
            get
            {
                String s = (String)ViewState["NextVisible"];
                return ((s == null) ? "visible" : s);
            }

            set
            {
                nextVisible = value;
                ViewState["NextVisible"] = nextVisible;
            }

        }

        [Browsable(false), DefaultValue(false)]
        public string PreNumVisible
        {
            get
            {
                String s = (String)ViewState["PreNumVisible"];
                return ((s == null) ? "visible" : s);
            }

            set
            {
                preNumVisible = value;
                ViewState["PreNumVisible"] = preNumVisible;
            }

        }
        [Browsable(false), DefaultValue(true)]
        public string NextNumVisible
        {
            get
            {
                String s = (String)ViewState["NextNumVisible"];
                return ((s == null) ? "visible" : s);
            }

            set
            {
                nextNumVisible = value;
                ViewState["NextNumVisible"] = nextNumVisible;
            }

        }

        [DefaultValue(0),Browsable(false)]
        public Int32 RCount
        {
            get
            {
                if (ViewState["RCount"] == null)
                {
                    ViewState["RCount"] = this.rCount;
                }
                return ViewState["RCount"] == null ? this.rCount : (Int32)ViewState["RCount"];
            }
            set
            {
                rCount = value;
                ViewState["RCount"] =rCount;
            }
        }
        [Browsable(true),Description("每页显示的记录条数"),DefaultValue(20)]
        public Int32 PageSize
        {
            get
            {
                if (ViewState["PageSize"] == null)
                {
                    ViewState["PageSize"] = this.pageSize;
                }
                return ViewState["PageSize"] == null ? this.pageSize : (Int32)ViewState["PageSize"];
            }
            set
            {
                pageSize = value;
                ViewState["PageSize"] = pageSize;
            }
        }
        protected override void RenderContents(HtmlTextWriter output)
        {
            if (RCount == 0)
            {
                output.Write("无数据");

            }
            else
            {
                if (this.RCount == this.PageSize * this.NumberCount + 1)
                {
                    this.NextVisible = "visible";// //显示下翻数字页按钮
                    this.NumberCount = 10;//要显示10个数字
                    output.Write(getRenderHtml());
                }
                else
                {
                    this.NextVisible = "hidden";// //显示下翻数字页按钮
                    this.NumberCount = countPage(); //要显示的数字个数
                    output.Write(getRenderHtml());
                }
            }
           
        }

        private string getRenderHtml()
        {
            StringBuilder result = new StringBuilder();
          

            if (this.LayerIndex > 1)
            {
                this.PreVisible = "visible";//显示上翻数字页按钮
            }
            else
            {
                this.PreVisible = "hidden";//不显示上翻数字按钮
            }
            string preNumberButtonHtml = "<a href='" + Url + "&pageIndex=" + preNumber() + "&layerIndex=" + LayerIndex + "' target='_self' class=" + this.NumberCss + "><<</a>"; //上页按钮
            string prePageButtonHtml = "<a href='" + Url + "&pageIndex=" + PageIndex + "&layerIndex=" + prePage() + "'  style='visibility:" + PreVisible + "' class=" + this.numberCss + ">...</a>";//上翻按钮           
            string nextPageButtonHtml = "<a href='" + Url + "&pageIndex=" +PageIndex + "&layerIndex=" + nextPage() + "' style='visibility:" + NextVisible + "' class=" + this.NumberCss + ">...</a>";//下翻按钮
            string nextNumberButtonHtml = "<a href='" + Url + "&pageIndex=" + nextNumber() + "&layerIndex=" +LayerIndex + "' target='_self'  class=" + this.NumberCss + ">>></a>"; //下页
            StringBuilder numberHtml = new StringBuilder();
            for (Int32 i = 0; i < NumberCount; i++)
            {
                Int32 index = (LayerIndex - 1) * PageSize + i + 1;
                numberHtml.Append("<a href=" + Url + "&pageIndex=" +viewStateCount(index,"PageIndex") + "&layerIndex=" +viewStateCount(LayerIndex,"LayerIndex") + " target='_self' class=" + this.NumberCss + ">");//数字按钮
                numberHtml.Append(i + 1);
                numberHtml.Append("</a>");

            }
            result.Append(preNumberButtonHtml);
            result.Append(prePageButtonHtml);
            result.Append(numberHtml);
            result.Append(nextPageButtonHtml);
            result.Append(nextNumberButtonHtml);
            return result.ToString();
          
        }

        private void statusBind()
        {
            if (this.LayerIndex > 1)
            {
                this.PreVisible = "visible";//显示上翻数字页按钮
            }
            else
            {
                this.PreVisible = "hidden";//不显示上翻数字按钮
            }

            if (RCount == PageSize * NumberCount + 1)
            {
                this.NextVisible = "visible";

            }
            else
            {
                this.NextVisible = "hidden";
            }

            if (PageIndex > 1)
            {
                this.PreNumVisible = "visible";

            }
            else
            {
                this.PreNumVisible = "hidden";
            }

            if(PageIndex )
            
        }

        //上页
        private Int32 preNumber()
        {
            if (LayerIndex > 1)
            {
                if (PageIndex > 1)
                {
                    PageIndex = PageIndex - 1;

                }
                else
                {
                    LayerIndex = LayerIndex - 1;

                }
            }
            return PageIndex;

          
            return PageIndex;
        }
        //下页
        private Int32 nextNumber()
        {
            if (PageIndex % PageSize == 0) //边界
            {
                LayerIndex = LayerIndex + 1;
            }
            else
            {
                PageIndex = PageIndex + 1;
            }
            return PageIndex;
        }
        //上页数字
        private Int32 prePage()
        {
            if (LayerIndex > 1)
            {
                LayerIndex = LayerIndex - 1;
            }
          
        }
        //下页数字
        private Int32 nextPage()
        {
            LayerIndex = LayerIndex + 1;
        }


        //翻页后改变viewState的值
        private Int32 viewStateCount(Int32 index, string viewStateKey)
        {
            ViewState[viewStateKey] = index;
            return index;
        }

        private Int32 countPage()
        {
            Int32 result = 0;
            if (RCount % PageSize == 0)
            {
                result = RCount / PageSize;
            }
            else
            {
                result = (RCount / PageSize) + 1;
            }
            return result;
        }
       
    }
}

posted @ 2008-06-06 18:04  koolay  阅读(289)  评论(0)    收藏  举报