English versionEnglish
杨涛的个人主页

UrlPager分页控件

Properties.cs

/*
 ASP.NET UrlPager control
 Copyright:2009-2010 Webdiyer (http://www.webdiyer.com)
 Source code released under Ms-PL license
 */
using System;
using System.ComponentModel;
using System.Web.Routing;

namespace Webdiyer.WebControls
{
    public partial class UrlPager
    {
        #region fields

        private const string CopyrightText =
            "<!--ASP.NET UrlPager 1.0 Copyright:2010 Webdiyer(http://www.webdiyer.com)-->";
        private static readonly object EventPageChanged = new object();
        #endregion

        #region public properties

        /// <summary>
        /// 获取或设置UrlPager分页控件要使用的路由表中的路由名称
        /// </summary>
        public string RouteName
        {
            get
            {
                object obj = ViewState["RouteValue"];
                return (string)obj;
            }
            set { ViewState["RouteValue"] = value; }
        }

        /// <summary>
        /// 获取或设置要应用到当前路由中的路由值(键/值对)
        /// </summary>
        [Browsable(true)]
        public RouteValueDictionary RouteValues { get
        {
            object obj = ViewState["RouteValues"];
            return (RouteValueDictionary)obj;
        }
            set { ViewState["RouteValues"] = value; }
        }

        /// <summary>
        /// 获取或设置一个值,该值指示是否继续当前页面中的路由值,如果该值为true,则当前页面的路由值也将被加入到RouteValues属性中
        /// </summary>
        [DefaultValue(false)]
        public bool InheritsRouteValues
        {
            get
            {
                object obj = ViewState["InheritsRouteValues"];
                return obj == null ? false : (bool)obj;
            }
            set
            {
                ViewState["InheritsRouteValues"] = value;
            }
        }

        /// <summary>
        /// 获取或设置要分页的记录总数
        /// </summary>
        [Browsable(false)]
        public int TotalItemCount
        {
            get
            {
                object obj = ViewState["TotalItemCount"];
                return obj == null ? 0 : (int)obj;
            }
            set
            {
                int count = value;
                if (value < 0)
                    count = 0;
                ViewState["TotalItemCount"] = count;
            }
        }

        /// <summary>
        /// 获取或设置每页显示的记录数
        /// </summary>
        [DefaultValue(10)]
        public int PageSize
        {
            get
            {
                object obj = ViewState["PageSize"];
                return obj == null ? 10 : (int)obj;
            }
            set
            {
                int pageSize = value;
                if (value <= 0)
                    pageSize = 10;
                ViewState["PageSize"] = pageSize;
            }
        }
        /// <summary>
        /// 获取或设置一个值,该值指示要分页的总记录数不只有一页时是否自动隐藏分页控件
        /// </summary>
        [DefaultValue(true)]
        public bool AutoHide
        {
            get
            {
                object obj = ViewState["AutoHide"];
                return obj == null ? true : (bool)obj;
            }
            set
            {
                ViewState["AutoHide"] = value;
            }
        }


        /// <summary>
        /// 获取或设置url中当前页索引的参数名,如果该参数名在路由中不存在,则参数将被添被添加到url的QueryString参数中
        /// </summary>
        [DefaultValue("pageIndex"),Browsable(true)]
        public string PageIndexParameterName
        {
            get
            {
                object obj = ViewState["PageIndexParameterName"];
                return obj == null ? "pageIndex" : (string)obj;
            }
            set { ViewState["PageIndexParameterName"] = value; }
        }
        
        /// <summary>
        /// 获取或设置分页控件显示的数字页索引的格式字符串
        /// </summary>
        [DefaultValue(null)]
        public string PageNumberFormatString
        {
            get{return (string)ViewState["PageNumberFormatString"];}
            set { ViewState["PageNumberFormatString"] = value; }
        }

        /// <summary>
        /// 获取或设置所有分页元素(数字页索引及上页、下页、首页和尾页等)容器格式字符串
        /// ToDo:此属性未使用
        /// </summary>
        [DefaultValue("{0} ")]
        public string PagerItemWrapperFormatString
        {
            get
            {
                object obj = ViewState["PagerItemWrapperFormatString"];
                return obj == null ? "{0} " : (string)obj;
            }
            set { ViewState["PagerItemWrapperFormatString"] = value; }
        }

        /// <summary>
        /// 获取或设置当前页索引文本格式字符串
        /// </summary>
        public string CurrentPageNumberFormatString
        {
            get{return (string)ViewState["CurrentPageNumberFormatString"];}
            set { ViewState["CurrentPageNumberFormatString"] = value; }
        }

        /// <summary>
        /// 获取或设置数字页索引容器格式字符串
        /// </summary>
        [DefaultValue("{0} ")]
        public string NumericPagerItemWrapperFormatString
        {
            get
            {
                object obj = ViewState["NumericPagerItemWrapperFormatString"];
                return obj == null ? PagerItemWrapperFormatString : (string)obj;
            }
            set { ViewState["NumericPagerItemWrapperFormatString"] = value; }
        }

        /// <summary>
        /// 获取或设置当前页索引容器格式字符串
        /// </summary>
        [DefaultValue("{0} ")]
        public string CurrentPagerItemWrapperFormatString
        {
            get
            {
                object obj = ViewState["CurrentPagerItemWrapperFormatString"];
                return obj == null ? PagerItemWrapperFormatString : (string)obj;
            }
            set { ViewState["CurrentPagerItemWrapperFormatString"] = value; }
        }

        /// <summary>
        /// 获取或设置上页、下页、首页和尾页四个分页元素容器格式字符串
        /// </summary>
        [DefaultValue("{0} ")]
        public string NavigationPagerItemWrapperFormatString
        {
            get
            {
                object obj = ViewState["NavigationPagerItemWrapperFormatString"];
                return obj == null ? PagerItemWrapperFormatString : (string)obj;
            }
            set { ViewState["NavigationPagerItemWrapperFormatString"] = value; }
        }

        /// <summary>
        /// 获取或设置更多页分页元素容器格式字符串
        /// </summary>
        [DefaultValue("{0} ")]
        public string MorePagerItemWrapperFormatString
        {
            get
            {
                object obj = ViewState["MorePagerItemWrapperFormatString"];
                return obj == null ? PagerItemWrapperFormatString : (string)obj;
            }
            set { ViewState["MorePagerItemWrapperFormatString"] = value; }
        }
        
        /// <summary>
        /// 获取或设置一个值,该值指示是否总是显示第一页和最后一页数字页索引
        /// </summary>
        [DefaultValue(false)]
        public bool AlwaysShowFirstLastPageNumber
        {
            get
            {
                object obj = ViewState["AlwaysShowFirstLastPageNumber"];
                return obj == null ? false : (bool)obj;
            }
            set
            {
                ViewState["AlwaysShowFirstLastPageNumber"] = value;
            }
        }
        /// <summary>
        /// 获取或设置分页控件显示的数字页索引的数目
        /// </summary>
        [DefaultValue(10)]
        public int NumericPagerItemCount
        {
            get
            {
                object obj = ViewState["NumericPagerItemCount"];
                return obj == null ? 10 : (int)obj;
            }
            set { ViewState["NumericPagerItemCount"] = value; }
        }
        /// <summary>
        /// 获取或设置一个值,该值指示是否显示前一页和后一页分页元素
        /// </summary>
        [DefaultValue(true)]
        public bool ShowPrevNext
        {
            get
            {
                object obj = ViewState["ShowPrevNext"];
                return obj == null ? true : (bool)obj;
            }
            set
            {
                ViewState["ShowPrevNext"] = value;
            }
        }
        /// <summary>
        /// 获取或设置前一页分页元素显示的文本
        /// </summary>
        [DefaultValue("上一页")]
        public string PrevPageText
        {
            get
            {
                string txt = (string)ViewState["PrevPageText"];
                return string.IsNullOrEmpty(txt) ? "上一页" : txt;
            }
            set { ViewState["PrevPageText"] = value; }
        }
        /// <summary>
        /// 获取或设置后一页分页元素显示的文本
        /// </summary>
        [DefaultValue("下一页")]
        public string NextPageText
        {
            get
            {
                string txt = (string)ViewState["NextPageText"];
                return string.IsNullOrEmpty(txt) ? "下一页" : txt;
            }
            set { ViewState["NextPageText"] = value; }
        }
        /// <summary>
        /// 获取或设置一个值,该值指示是否显示数字页索引分页元素
        /// </summary>
        [DefaultValue(true)]
        public bool ShowNumericPagerItems
        {
            get
            {
                object obj = ViewState["ShowNumericPagerItems"];
                return obj == null ? true : (bool)obj;
            }
            set
            {
                ViewState["ShowNumericPagerItems"] = value;
            }
        }
        /// <summary>
        /// 获取或设置一个值,该值指示是否显示首页和尾页分页元素
        /// </summary>
        [DefaultValue(true)]
        public bool ShowFirstLast
        {
            get
            {
                object obj = ViewState["ShowFirstLast"];
                return obj == null ? true : (bool)obj;
            }
            set
            {
                ViewState["ShowFirstLast"] = value;
            }
        }
        /// <summary>
        /// 获取或设置首页分页元素显示的文本
        /// </summary>
        [DefaultValue("首页")]
        public string FirstPageText
        {
            get
            {
                string txt = (string)ViewState["FirstPageText"];
                return string.IsNullOrEmpty(txt) ? "首页" : txt;
            }
            set { ViewState["FirstPageText"] = value; }
        }
        /// <summary>
        /// 获取或设置尾页分页元素显示的文本
        /// </summary>
        [DefaultValue("尾页")]
        public string LastPageText
        {
            get
            {
                string txt = (string)ViewState["LastPageText"];
                return string.IsNullOrEmpty(txt) ? "尾页" : txt;
            }
            set { ViewState["LastPageText"] = value; }
        }
        /// <summary>
        /// 获取或设置一个值,该值指示是否显示更多页分页元素
        /// </summary>
        [DefaultValue(true)]
        public bool ShowMorePagerItems
        {
            get
            {
                object obj = ViewState["ShowMorePagerItems"];
                return obj == null ? true : (bool)obj;
            }
            set
            {
                ViewState["ShowMorePagerItems"] = value;
            }
        }
        /// <summary>
        /// 获取或设置更多页分页元素显示的文本
        /// </summary>
        [DefaultValue("...")]
        public string MorePageText
        {
            get
            {
                string txt = (string)ViewState["MorePageText"];
                return string.IsNullOrEmpty(txt) ? "..." : txt;
            }
            set { ViewState["MorePageText"] = value; }
        }
        /// <summary>
        /// 获取或设置一个值,该值指示是否显示不活动的分页元素(当前页为第一页时为首页和前一页,当前页为最后一页时为尾页和后一页)
        /// </summary>
        [DefaultValue(true)]
        public bool ShowInactivePagerItems
        {
            get
            {
                object obj = ViewState["ShowInactivePagerItems"];
                return obj == null ? true : (bool)obj;
            }
            set
            {
                ViewState["ShowInactivePagerItems"] = value;
            }
        }

        /// <summary>
        /// 获取或设置当前页索引
        /// </summary>
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public int CurrentPageIndex
        {
            get
            {
                object cpage = ViewState["CurrentPageIndex"];
                int pindex = (cpage == null) ? 1 : (int)cpage;
                if (pindex > PageCount && PageCount > 0)
                    return PageCount;
                if (pindex < 1)
                    return 1;
                return pindex;
            }
            set
            {
                int cpage = value;
                if (cpage < 1)
                    cpage = 1;
                else if (cpage > PageCount)
                    cpage = PageCount;
                ViewState["CurrentPageIndex"] = cpage;
            }
        }

        /// <summary>
        /// 获取当前页的起始记录索引
        /// </summary>
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public int StartRecordIndex
        {
            get
            {
                return (CurrentPageIndex - 1) * PageSize + 1;
            }
        }

        /// <summary>
        /// 获取当前页的结束记录索引
        /// </summary>
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public int EndRecordIndex
        {
            get
            {
                if (CurrentPageIndex < PageCount)
                    return (CurrentPageIndex * PageSize);
                return TotalItemCount;
            }
        }

        /// <summary>
        /// 获取要分页的数据的总页数
        /// </summary>
        [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
        public int PageCount
        {
            get
            {
                if (TotalItemCount == 0)
                    return 1;
                return (int)Math.Ceiling((double)TotalItemCount / (double)PageSize);
            }
        }
        #endregion
    }
}