using System; using System.ComponentModel; using System.IO; using System.Web.UI; using System.Web.UI.WebControls; namespace OT.Controls.DataPager { public partial class Pager { #region Private fields private enum NavigationButton : byte { First, Prev, Next, Last } //private string cssClassName; private string inputPageIndex; private string currentUrl; private string queryString; private Pager cloneFrom; private static readonly object EventPageChanging = new object(); private static readonly object EventPageChanged = new object(); //bool pageChangeEventHandled = false; //AspNetPager Version number, does not use reflection for perfomance reason const string VersionNumber = "7.3.2"; #endregion #region Navigation Buttons [Category("Behavior"), Browsable(true), DefaultValue(""), Description("導航按鈕提示信息格式化。")] public bool ShowNavigationToolTip { get { if (null != cloneFrom) return cloneFrom.ShowNavigationToolTip; object obj = ViewState["ShowNvToolTip"]; return (obj == null) ? false : (bool)obj; } set { ViewState["ShowNvToolTip"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(""), Description("頁碼按鈕提示信息格式化。")] public string NavigationToolTipTextFormatString { get { if (null != cloneFrom) return cloneFrom.NavigationToolTipTextFormatString; object obj = ViewState["NvToolTipFormatString"]; if (obj == null) { if (ShowNavigationToolTip) return "ShowNavigationToolTip:{0}"; return null; } return (string)obj; } set { string tip = value; if (tip.Trim().Length < 1 && tip.IndexOf("{0}") < 0) tip = "{0}"; ViewState["NvToolTipFormatString"] = tip; } } [Category("Behavior"), Browsable(true), DefaultValue(""), Description("頁碼按鈕顯示格式化。")] public string NumericButtonTextFormatString { get { if (null != cloneFrom) return cloneFrom.NumericButtonTextFormatString; object obj = ViewState["NumericButtonTextFormatString"]; return (obj == null) ? String.Empty : (string)obj; } set { ViewState["NumericButtonTextFormatString"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(""), Description("當前頁碼按鈕顯示格式化。")] public string CurrentPageButtonTextFormatString { get { if (null != cloneFrom) return cloneFrom.CurrentPageButtonTextFormatString; object obj = ViewState["CurrentPageButtonTextFormatString"]; return (obj == null) ? NumericButtonTextFormatString : (string)obj; } set { ViewState["CurrentPageButtonTextFormatString"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(PagingButtonType.Image), Description("頁碼按鈕顯示類型。預設:Text")] public PagingButtonType PagingButtonType { get { if (null != cloneFrom) return cloneFrom.PagingButtonType; object obj = ViewState["PagingButtonType"]; return (obj == null) ? PagingButtonType.Image : (PagingButtonType)obj; } set { ViewState["PagingButtonType"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(PagingButtonType.Text), Description("頁碼按鈕顯示類型。預設:Text")] public PagingButtonType NumericButtonType { get { if (null != cloneFrom) return cloneFrom.NumericButtonType; object obj = ViewState["NumericButtonType"]; return (obj == null) ? PagingButtonType.Text : (PagingButtonType)obj; } set { ViewState["NumericButtonType"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(PagingButtonLayoutType.None), Description("頁碼按鈕顯示樣式類型。預設:None")] public PagingButtonLayoutType PagingButtonLayoutType { get { if (null != cloneFrom) return cloneFrom.PagingButtonLayoutType; object obj = ViewState["PagingButtonLayoutType"]; return (obj == null) ? PagingButtonLayoutType.None : (PagingButtonLayoutType)obj; } set { ViewState["PagingButtonLayoutType"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(NavigationButtonPosition.BothSides), Description("當前頁碼按鈕定位方式。預設:BothSides")] public PagingButtonPosition CurrentPageButtonPosition { get { if (null != cloneFrom) return cloneFrom.CurrentPageButtonPosition; object obj = ViewState["CurrentPageButtonPosition"]; return (obj == null) ? PagingButtonPosition.Fixed : (PagingButtonPosition)obj; } set { ViewState["CurrentPageButtonPosition"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(NavigationButtonPosition.BothSides), Description("導航按鈕定位方式。預設:BothSides")] public NavigationButtonPosition NavigationButtonsPosition { get { if (null != cloneFrom) return cloneFrom.NavigationButtonsPosition; object obj = ViewState["NavigationButtonsPosition"]; return (obj == null) ? NavigationButtonPosition.BothSides : (NavigationButtonPosition)obj; } set { ViewState["NavigationButtonsPosition"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(PagingButtonType.Button), Description("導航按鈕類型。預設:Button")] public PagingButtonType NavigationButtonType { get { if (null != cloneFrom) return cloneFrom.NavigationButtonType; object obj = ViewState["NavigationButtonType"]; return (obj == null) ? PagingButtonType.Button : (PagingButtonType)obj; } set { ViewState["NavigationButtonType"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(""), TypeConverter(typeof(TargetConverter)), Description("UrlPagingTarget。")] public string UrlPagingTarget { get { if (null != cloneFrom) return cloneFrom.UrlPagingTarget; return (string)ViewState["UrlPagingTarget"]; } set { ViewState["UrlPagingTarget"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(PagingButtonType.Text), Description("More按鈕的顯示類型。預設:Text")] public PagingButtonType MoreButtonType { get { if (null != cloneFrom) return cloneFrom.MoreButtonType; object obj = ViewState["MoreButtonType"]; return (obj == null) ? PagingButtonType.Text : (PagingButtonType)obj; } set { ViewState["MoreButtonType"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(typeof(Unit), "5px"), Description("頁碼的間距。預設:5px")] public Unit PagingButtonSpacing { get { if (null != cloneFrom) return cloneFrom.PagingButtonSpacing; object obj = ViewState["PagingButtonSpacing"]; return (obj == null) ? Unit.Pixel(5) : (Unit.Parse(obj.ToString())); } set { ViewState["PagingButtonSpacing"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(true), Description("是否顯示第一頁和最後一頁控件")] public bool ShowFirstLast { get { if (null != cloneFrom) return cloneFrom.ShowFirstLast; object obj = ViewState["ShowFirstLast"]; return (obj == null) ? true : (bool)obj; } set { ViewState["ShowFirstLast"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(true), Description("是否顯示上一頁和下一頁控件")] public bool ShowPrevNext { get { if (null != cloneFrom) return cloneFrom.ShowPrevNext; object obj = ViewState["ShowPrevNext"]; return (obj == null) ? true : (bool)obj; } set { ViewState["ShowPrevNext"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(true), Description("是否顯示頁碼")] public bool ShowPageIndex { get { if (null != cloneFrom) return cloneFrom.ShowPageIndex; object obj = ViewState["ShowPageIndex"]; return (obj == null) ? true : (bool)obj; } set { ViewState["ShowPageIndex"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(true), Description("是否顯示More按鈕")] public bool ShowMoreButtons { get { if (null != cloneFrom) return cloneFrom.ShowMoreButtons; object obj = ViewState["ShowMoreButtons"]; return (obj == null) ? true : (bool)obj; } set { ViewState["ShowMoreButtons"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue("<<"), Description("第一頁顯示文字,預設<<")] public string FirstPageText { get { if (null != cloneFrom) return cloneFrom.FirstPageText; object obj = ViewState["FirstPageText"]; return (obj == null) ? "<<" : (string)obj; } set { ViewState["FirstPageText"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue("<"), Description("上一頁顯示文字,預設<")] public string PrevPageText { get { if (null != cloneFrom) return cloneFrom.PrevPageText; object obj = ViewState["PrevPageText"]; return (obj == null) ? "<" : (string)obj; } set { ViewState["PrevPageText"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(">"), Description("下一頁顯示文字,預設>")] public string NextPageText { get { if (null != cloneFrom) return cloneFrom.NextPageText; object obj = ViewState["NextPageText"]; return (obj == null) ? ">" : (string)obj; } set { ViewState["NextPageText"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(">>"), Description("最後一頁顯示文字,預設>>")] public string LastPageText { get { if (null != cloneFrom) return cloneFrom.LastPageText; object obj = ViewState["LastPageText"]; return (obj == null) ? ">>" : (string)obj; } set { ViewState["LastPageText"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(10), Description("分頁長度,預設10")] public int NumericButtonCount { get { if (null != cloneFrom) return cloneFrom.NumericButtonCount; object obj = ViewState["NumericButtonCount"]; return (obj == null) ? 10 : (int)obj; } set { ViewState["NumericButtonCount"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(true), Description("是否顯示禁用的按鈕")] public bool ShowDisabledButtons { get { if (null != cloneFrom) return cloneFrom.ShowDisabledButtons; object obj = ViewState["ShowDisabledButtons"]; return (obj == null) ? true : (bool)obj; } set { ViewState["ShowDisabledButtons"] = value; } } #endregion #region Image Navigation Buttons [Category("Behavior"), Browsable(true), DefaultValue(""), Description("圖片路徑.")] public string ImagePath { get { if (null != cloneFrom) return cloneFrom.ImagePath; string imgPath = (string)ViewState["ImagePath"]; if (imgPath != null) imgPath = ResolveUrl(imgPath); return imgPath; } set { string imgPath = value.Trim().Replace("\\", "/"); ViewState["ImagePath"] = (imgPath.EndsWith("/")) ? imgPath : imgPath + "/"; } } [Category("Behavior"), Browsable(true), DefaultValue(".gif"), Description("圖片後綴名稱.")] public string ButtonImageExtension { get { if (null != cloneFrom) return cloneFrom.ButtonImageExtension; object obj = ViewState["ButtonImageExtension"]; return (obj == null) ? ".gif" : (string)obj; } set { string ext = value.Trim(); ViewState["ButtonImageExtension"] = (ext.StartsWith(".")) ? ext : ("." + ext); } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("按鈕圖片後綴名稱.")] public string ButtonImageNameExtension { get { if (null != cloneFrom) return cloneFrom.ButtonImageNameExtension; object obj = ViewState["ButtonImageNameExtension"]; return (obj == null) ? null : (string)obj; } set { ViewState["ButtonImageNameExtension"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("Cpi圖片後綴名稱.")] public string CpiButtonImageNameExtension { get { if (null != cloneFrom) return cloneFrom.CpiButtonImageNameExtension; object obj = ViewState["CpiButtonImageNameExtension"]; return (obj == null) ? ButtonImageNameExtension : (string)obj; } set { ViewState["CpiButtonImageNameExtension"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("隱藏圖片後綴名稱.")] public string DisabledButtonImageNameExtension { get { if (null != cloneFrom) return cloneFrom.DisabledButtonImageNameExtension; object obj = ViewState["DisabledButtonImageNameExtension"]; return (obj == null) ? ButtonImageNameExtension : (string)obj; } set { ViewState["DisabledButtonImageNameExtension"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(ImageAlign.NotSet), Description("圖片對齊方式. 預設NotSet")] public ImageAlign ButtonImageAlign { get { if (null != cloneFrom) return cloneFrom.ButtonImageAlign; object obj = ViewState["ButtonImageAlign"]; return (obj == null) ? ImageAlign.NotSet : (ImageAlign)obj; } set { if (value != ImageAlign.Right && value != ImageAlign.Left) ViewState["ButtonImageAlign"] = value; } } #endregion #region Paging [Category("Behavior"), Browsable(true), DefaultValue(false), Description("是否啟用Url分頁. 預設false")] public bool UrlPaging { get { if (null != cloneFrom) return cloneFrom.UrlPaging; object obj = ViewState["UrlPaging"]; return (null == obj) ? false : (bool)obj; } set { ViewState["UrlPaging"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue("page"), Description("Url分頁當前頁碼參數名稱. 預設false")] public string UrlPageIndexName { get { if (null != cloneFrom) return cloneFrom.UrlPageIndexName; object obj = ViewState["UrlPageIndexName"]; return (null == obj) ? "page" : (string)obj; } set { ViewState["UrlPageIndexName"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(""), Description("Url分頁大小參數名稱. 預設false")] public string UrlPageSizeName { get { if (null != cloneFrom) return cloneFrom.UrlPageSizeName; return (string)ViewState["UrlPageSizeName"]; } set { ViewState["UrlPageSizeName"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(false), Description("頁碼倒序排列. 預設false")] public bool ReverseUrlPageIndex { get { if (null != cloneFrom) return cloneFrom.ReverseUrlPageIndex; object obj = ViewState["ReverseUrlPageIndex"]; return (null == obj) ? false : (bool)obj; } set { ViewState["ReverseUrlPageIndex"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(0), Description("當前頁碼. 預設1")] public int CurrentPageIndex { get { if (null != cloneFrom) return cloneFrom.CurrentPageIndex; 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; //Deleted by Ethan,因為初始化的時候Gridview還沒有資料,無法恢復記錄的頁碼 Start. //else if (cpage > PageCount) // cpage = PageCount; //Deleted by Ethan,因為初始化的時候Gridview還沒有資料,無法恢復記錄的頁碼 End. ViewState["CurrentPageIndex"] = cpage; //if(!pageChangeEventHandled) //{ // OnPageChanging(new PageChangingEventArgs(cpage)); //} } } [Category("Behavior"), Browsable(true), DefaultValue(0), Description("資料總筆數. 預設0")] public int RecordCount { get { if (null != cloneFrom) return cloneFrom.RecordCount; object obj = ViewState["Recordcount"]; return (obj == null) ? 0 : (int)obj; } set { ViewState["Recordcount"] = value; } } [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int PagesRemain { get { return PageCount - CurrentPageIndex; } } [Category("Behavior"), Browsable(true), DefaultValue(10), Description("分頁資料筆數. 預設10")] public int PageSize { get { if (!string.IsNullOrEmpty(UrlPageSizeName) && !DesignMode) { int pageSize; if (int.TryParse(Page.Request.QueryString[UrlPageSizeName], out pageSize)) { if (pageSize > 0) return pageSize; } } if (null != cloneFrom) return cloneFrom.PageSize; object obj = ViewState["PageSize"]; return (obj == null) ? 10 : (int)obj; } set { ViewState["PageSize"] = value; } } [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int RecordsRemain { get { if (CurrentPageIndex < PageCount) return RecordCount - (CurrentPageIndex * PageSize); return 0; } } [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int StartRecordIndex { get { //if (FillLastPage && RecordCount > PageSize && CurrentPageIndex == PageCount) // return RecordCount - PageSize; return (CurrentPageIndex - 1) * PageSize + 1; } } [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int EndRecordIndex { get { return RecordCount - RecordsRemain; } } [Browsable(false), DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public int PageCount { get { if (RecordCount == 0) return 1; return (int)Math.Ceiling((double)RecordCount / (double)PageSize); } } #endregion #region [Category("Behavior"), Browsable(true), DefaultValue(ShowPageMax.Always), Description("是否顯示跳轉頁面碼控件. 預設Never")] public ShowPageMax ShowPageMax { get { if (null != cloneFrom) return cloneFrom.ShowPageMax; object obj = ViewState["ShowPageMax"]; return (obj == null) ? ShowPageMax.Always : (ShowPageMax)obj; } set { ViewState["ShowPageMax"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(PageMaxType.TextBox), Description("跳轉頁面碼控件類型")] public PageMaxType PageMaxType { get { if (null != cloneFrom) return cloneFrom.PageMaxType; object obj = ViewState["PageIndexBoxType"]; return (obj == null) ? PageMaxType.TextBox : (PageMaxType)obj; } set { ViewState["PageIndexBoxType"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("跳轉頁面碼控件CssClass")] public string PageMaxClass { get { if (null != cloneFrom) return cloneFrom.PageMaxClass; object obj = ViewState["PageMaxClass"]; return (obj == null) ? null : (string)obj; //return (obj == null) ? "right" : (string)obj; } set { if (value.Trim().Length > 0) ViewState["PageMaxClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("跳轉頁面碼控件Style")] public string PageMaxStyle { get { if (null != cloneFrom) return cloneFrom.PageMaxStyle; object obj = ViewState["PageMaxStyle"]; return (obj == null) ? null : (string)obj; } set { if (value.Trim().Length > 0) ViewState["PageMaxStyle"] = value; } } #endregion #region Page index box //gary [Category("Behavior"), Browsable(true), DefaultValue(ShowPageIndexBox.Always), Description("是否顯示跳轉頁面碼控件. 預設Never")] public ShowPageIndexBox ShowPageIndexBox { get { if (null != cloneFrom) return cloneFrom.ShowPageIndexBox; object obj = ViewState["ShowPageIndexBox"]; return (obj == null) ? ShowPageIndexBox.Always : (ShowPageIndexBox)obj; } set { ViewState["ShowPageIndexBox"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(PageIndexBoxType.TextBox), Description("跳轉頁面碼控件類型")] public PageIndexBoxType PageIndexBoxType { get { if (null != cloneFrom) return cloneFrom.PageIndexBoxType; object obj = ViewState["PageIndexBoxType"]; return (obj == null) ? PageIndexBoxType.TextBox : (PageIndexBoxType)obj; } set { ViewState["PageIndexBoxType"] = value; } } //gary end [Category("Behavior"), Browsable(true), DefaultValue(null), Description("跳轉頁面碼控件CssClass")] public string PageIndexBoxClass { get { if (null != cloneFrom) return cloneFrom.PageIndexBoxClass; object obj = ViewState["PageIndexBoxClass"]; return (obj == null) ? null : (string)obj; } set { if (value.Trim().Length > 0) ViewState["PageIndexBoxClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("跳轉頁面碼控件Style")] public string PageIndexBoxStyle { get { if (null != cloneFrom) return cloneFrom.PageIndexBoxStyle; object obj = ViewState["PageIndexBoxStyle"]; return (obj == null) ? null : (string)obj; } set { if (value.Trim().Length > 0) ViewState["PageIndexBoxStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("跳轉頁面碼控件前顯示的文字。例如第X")] public string TextBeforePageIndexBox { get { if (null != cloneFrom) return cloneFrom.TextBeforePageIndexBox; object obj = ViewState["TextBeforePageIndexBox"]; return (null == obj) ? null : (string)obj; } set { ViewState["TextBeforePageIndexBox"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("跳轉頁面碼控件後顯示的文字。例如X頁")] public string TextAfterPageIndexBox { get { if (null != cloneFrom) return cloneFrom.TextAfterPageIndexBox; object obj = ViewState["TextAfterPageIndexBox"]; return (null == obj) ? null : (string)obj; } set { ViewState["TextAfterPageIndexBox"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue("Go"), Description("跳轉頁面按鈕的文字。")] public string SubmitButtonText { get { if (null != cloneFrom) return cloneFrom.SubmitButtonText; object obj = ViewState["SubmitButtonText"]; return (null == obj) ? "Go" : (string)obj; } set { if (null == value) value = "Go"; ViewState["SubmitButtonText"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(""), Description("跳轉頁面按鈕的Class。")] public string SubmitButtonClass { get { if (null != cloneFrom) return cloneFrom.SubmitButtonClass; return (string)ViewState["SubmitButtonClass"]; } set { ViewState["SubmitButtonClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(""), Description("跳轉頁面按鈕的Style。")] public string SubmitButtonStyle { get { if (null != cloneFrom) return cloneFrom.SubmitButtonStyle; return (string)ViewState["SubmitButtonStyle"]; } set { ViewState["SubmitButtonStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(""), Description("跳轉頁面按鈕的圖片Url路徑。")] public string SubmitButtonImageUrl { get { if (null != cloneFrom) return cloneFrom.SubmitButtonImageUrl; return (string)ViewState["SubmitButtonImageUrl"]; } set { ViewState["SubmitButtonImageUrl"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(1), Description("當超過多少頁時顯示跳轉頁面碼控件。預設30")] public int ShowBoxThreshold { get { if (null != cloneFrom) return cloneFrom.ShowBoxThreshold; object obj = ViewState["ShowBoxThreshold"]; return (null == obj) ? 1 : (int)obj; } set { ViewState["ShowBoxThreshold"] = value; } } #endregion #region CustomInfoSection [Category("Behavior"), Browsable(true), DefaultValue(ShowCustomInfoSection.Never), Description("顯示客制化信息。預設Never")] public ShowCustomInfoSection ShowCustomInfoSection { get { if (null != cloneFrom) return cloneFrom.ShowCustomInfoSection; object obj = ViewState["ShowCustomInfoSection"]; return (null == obj) ? ShowCustomInfoSection.Never : (ShowCustomInfoSection)obj; } set { ViewState["ShowCustomInfoSection"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(HorizontalAlign.NotSet), Description("顯示客制化信息的水平方式")] public HorizontalAlign CustomInfoTextAlign { get { if (null != cloneFrom) return cloneFrom.CustomInfoTextAlign; object obj = ViewState["CustomInfoTextAlign"]; return (null == obj) ? HorizontalAlign.NotSet : (HorizontalAlign)obj; } set { ViewState["CustomInfoTextAlign"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(typeof(Unit), "40%"), Description("顯示客制化信息的寬度")] public Unit CustomInfoSectionWidth { get { if (null != cloneFrom) return cloneFrom.CustomInfoSectionWidth; object obj = ViewState["CustomInfoSectionWidth"]; return (null == obj) ? Unit.Percentage(40) : (Unit)obj; } set { ViewState["CustomInfoSectionWidth"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("顯示客制化信息的Class")] public string CustomInfoClass { get { if (null != cloneFrom) return cloneFrom.CustomInfoClass; object obj = ViewState["CustomInfoClass"]; return (null == obj) ? CssClass : (string)obj; } set { ViewState["CustomInfoClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("顯示客制化信息的Style")] public string CustomInfoStyle { get { if (null != cloneFrom) return cloneFrom.CustomInfoStyle; object obj = ViewState["CustomInfoStyle"]; return (null == obj) ? Style.Value : (string)obj; } set { ViewState["CustomInfoStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue("Page %CurrentPageIndex% of %PageCount%"), Description("顯示客制化信息的格式。預設:Page %CurrentPageIndex% of %PageCount%")] public string CustomInfoHTML { get { if (null != cloneFrom) return cloneFrom.CustomInfoHTML; object obj = ViewState["CustomInfoText"]; return (null == obj) ? "Page %CurrentPageIndex% of %PageCount%" : (string)obj; } set { ViewState["CustomInfoText"] = value; } } #endregion #region Css class and styles [Category("Behavior"), Browsable(true), DefaultValue(null), Description("當前頁碼的Style。")] public string CurrentPageButtonStyle { get { if (null != cloneFrom) return cloneFrom.CurrentPageButtonStyle; object obj = ViewState["CPBStyle"]; return (null == obj) ? null : (string)obj; } set { ViewState["CPBStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("當前頁碼的Class。")] public string CurrentPageButtonClass { get { if (null != cloneFrom) return cloneFrom.CurrentPageButtonClass; object obj = ViewState["CPBClass"]; return (null == obj) ? null : (string)obj; } set { ViewState["CPBClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("分頁頁碼的Class。")] public string PagingButtonsClass { get { if (null != cloneFrom) return cloneFrom.PagingButtonsClass; object obj = ViewState["PagingButtonsClass"]; return (null == obj) ? null : (string)obj; } set { ViewState["PagingButtonsClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("分頁頁碼的Style。")] public string PagingButtonsStyle { get { if (null != cloneFrom) return cloneFrom.PagingButtonsStyle; object obj = ViewState["PagingButtonsStyle"]; return (null == obj) ? null : (string)obj; } set { ViewState["PagingButtonsStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("第一頁的Class。")] public string FirstButtonsClass { get { if (null != cloneFrom) return cloneFrom.FirstButtonsClass; object obj = ViewState["FirstButtonsClass"]; return (null == obj) ? null : (string)obj; } set { ViewState["FirstButtonsClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("第一頁的Style。")] public string FirstButtonsStyle { get { if (null != cloneFrom) return cloneFrom.FirstButtonsStyle; object obj = ViewState["FirstButtonsStyle"]; return (null == obj) ? PagingButtonsStyle : (string)obj; } set { ViewState["FirstButtonsStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("最後一頁的Class。")] public string LastButtonsClass { get { if (null != cloneFrom) return cloneFrom.LastButtonsClass; object obj = ViewState["LastButtonsClass"]; return (null == obj) ? null : (string)obj; } set { ViewState["LastButtonsClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("最後一頁的Style。")] public string LastButtonsStyle { get { if (null != cloneFrom) return cloneFrom.LastButtonsStyle; object obj = ViewState["LastButtonsStyle"]; return (null == obj) ? PagingButtonsStyle : (string)obj; } set { ViewState["LastButtonsStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("上一頁的Class。")] public string PrevButtonsClass { get { if (null != cloneFrom) return cloneFrom.PrevButtonsClass; object obj = ViewState["PrevButtonsClass"]; return (null == obj) ? null : (string)obj; } set { ViewState["PrevButtonsClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("上一頁的Style。")] public string PrevButtonsStyle { get { if (null != cloneFrom) return cloneFrom.PrevButtonsStyle; object obj = ViewState["PrevButtonsStyle"]; return (null == obj) ? PagingButtonsStyle : (string)obj; } set { ViewState["PrevButtonsStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("下一頁的Class。")] public string NextButtonsClass { get { if (null != cloneFrom) return cloneFrom.NextButtonsClass; object obj = ViewState["NextButtonsClass"]; return (null == obj) ? null : (string)obj; } set { ViewState["NextButtonsClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("下一頁的Style。")] public string NextButtonsStyle { get { if (null != cloneFrom) return cloneFrom.NextButtonsStyle; object obj = ViewState["NextButtonsStyle"]; return (null == obj) ? PagingButtonsStyle : (string)obj; } set { ViewState["NextButtonsStyle"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("...的Style。")] public string MoreButtonsClass { get { if (null != cloneFrom) return cloneFrom.MoreButtonsClass; object obj = ViewState["MoreButtonsClass"]; return (null == obj) ? PagingButtonsClass : (string)obj; } set { ViewState["MoreButtonsClass"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(null), Description("...的Style。")] public string MoreButtonsStyle { get { if (null != cloneFrom) return cloneFrom.MoreButtonsStyle; object obj = ViewState["MoreButtonsStyle"]; return (null == obj) ? PagingButtonsStyle : (string)obj; } set { ViewState["MoreButtonsStyle"] = value; } } #endregion #region Others [Category("Behavior"), Browsable(true), DefaultValue(false), Description("控件的ID")] public string CloneFrom { get { return (string)ViewState["CloneFrom"]; } set { if (null != value && String.Empty == value.Trim()) throw new ArgumentNullException("CloneFrom", "The Value of property CloneFrom can not be empty string!"); if (ID.Equals(value, StringComparison.OrdinalIgnoreCase)) throw new ArgumentException("The property value of CloneFrom can not be set to control itself!", "CloneFrom"); ViewState["CloneFrom"] = value; } } ///// public override bool EnableTheming { get { if (null != cloneFrom) return cloneFrom.EnableTheming; return base.EnableTheming; } set { base.EnableTheming = value; } } ///// public override string SkinID { get { if (null != cloneFrom) return cloneFrom.SkinID; return base.SkinID; } set { base.SkinID = value; } } [Category("Behavior"), Browsable(true), DefaultValue(false), Description("是否使用Url分頁")] public bool EnableUrlRewriting { get { object obj = ViewState["UrlRewriting"]; if (null == obj) { if (null != cloneFrom) return cloneFrom.EnableUrlRewriting; return false; } return (bool)obj; } set { ViewState["UrlRewriting"] = value; if (value) UrlPaging = true; } } [Category("Behavior"), Browsable(true), DefaultValue(false), Description("返回頁面")] public string UrlRewritePattern { get { object obj = ViewState["URPattern"]; if (null == obj) { if (null != cloneFrom) return cloneFrom.UrlRewritePattern; if (EnableUrlRewriting) { if (!DesignMode) { string filePath = Page.Request.FilePath; return Path.GetFileNameWithoutExtension(filePath) + "_{0}" + Path.GetExtension(filePath); } } return null; } return (string)obj; } set { ViewState["URPattern"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(false), Description("是否總是顯示分頁控件")] public bool AlwaysShow { get { object obj = ViewState["AlwaysShow"]; if (null == obj) { if (null != cloneFrom) return cloneFrom.AlwaysShow; return false; } return (bool)obj; } set { ViewState["AlwaysShow"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(true), Description("是否總是顯示第一頁和最後一頁")] public bool AlwaysShowFirstLastPageNumber { get { object obj = ViewState["AlwaysShowFirstLastPageNumber"]; if (null == obj) { if (null != cloneFrom) return cloneFrom.AlwaysShowFirstLastPageNumber; return false; } return (bool)obj; } set { ViewState["AlwaysShowFirstLastPageNumber"] = value; } } ///// public override bool Wrap { get { return base.Wrap; } set { base.Wrap = false; } } [Category("Behavior"), Browsable(true), DefaultValue("當前頁碼超出正常範圍"), Description("當前頁碼超出正常範圍提示信息。")] public string PageIndexOutOfRangeErrorMessage { get { object obj = ViewState["PIOutOfRangeErrorMsg"]; if (null == obj) { if (null != cloneFrom) return cloneFrom.PageIndexOutOfRangeErrorMessage; return "當前頁碼超出正常範圍"; } return (string)obj; } set { ViewState["PIOutOfRangeErrorMsg"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue("當前頁碼無效"), Description("當前頁碼無效的錯誤提示信息。")] public string InvalidPageIndexErrorMessage { get { object obj = ViewState["InvalidPIErrorMsg"]; if (null == obj) { if (null != cloneFrom) return cloneFrom.InvalidPageIndexErrorMessage; return "當前頁碼無效"; } return (string)obj; } set { ViewState["InvalidPIErrorMsg"] = value; } } [Category("Behavior"), Browsable(true), DefaultValue(LayoutType.Table), Description("分頁控件預設顯示方式。預設Table")] public LayoutType LayoutType { get { if (null != cloneFrom) return cloneFrom.LayoutType; object obj = ViewState["LayoutType"]; return (null == obj) ? LayoutType.Table : (LayoutType)obj; } set { ViewState["LayoutType"] = value; } } #endregion } }