AspNetPager paging control

aspnetpager.cs

    1 /* AspNetPager version 7.3.2
    2 Copyright (C) 2003-2010  Webdiyer(http://en.webdiyer.com)
    3 
    4 This file is part of AspNetPager.
    5 
    6 AspNetPager is free software: you can redistribute it and/or modify
    7 it under the terms of the GNU Lesser General Public License as published by
    8 the Free Software Foundation, either version 3 of the License, or
    9 (at your option) any later version.
   10 
   11 AspNetPager is distributed in the hope that it will be useful,
   12 but WITHOUT ANY WARRANTY; without even the implied warranty of
   13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   14 GNU Lesser General Public License for more details.
   15 
   16 You should have received a copy of the GNU Lesser General Public License
   17 along with AspNetPager.  If not, see <http://www.gnu.org/licenses/>.
   18 */
   17 
   18 using System;
   19 using System.ComponentModel;
   20 using System.Text;
   21 using System.Web.UI;
   22 using System.Web.UI.WebControls;
   23 using System.Web;
   24 using System.Security.Permissions;
   25 
   26 namespace Wuqi.Webdiyer
   27 {
   28     #region AspNetPager Server Control
   29 
   30     /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Class[@name="AspNetPager"]/*'/>
   31     [AspNetHostingPermission(SecurityAction.Demand, Level = AspNetHostingPermissionLevel.Minimal)]
   32     [DefaultProperty("PageSize")]
   33     [DefaultEvent("PageChanged")]
   34     [ParseChildren(false)]
   35     [PersistChildren(false)]
   36     [ANPDescription("desc_AspNetPager")]
   37     [Designer(typeof(PagerDesigner))]
   38     [ToolboxData("<{0}:AspNetPager runat=server></{0}:AspNetPager>")]
   39     [System.Drawing.ToolboxBitmap(typeof(AspNetPager),"AspNetPager.bmp")]
   40     public partial class AspNetPager : Panel, INamingContainer, IPostBackEventHandler, IPostBackDataHandler
   41     {
   42 
   43         #region Control Rendering Logic
   44 
   45         /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Method[@name="OnInit"]/*'/>
   46         protected override void OnInit(EventArgs e)
   47         {
   48             base.OnInit(e);
   49             if (null != CloneFrom && string.Empty != CloneFrom.Trim())
   50             {
   51                 AspNetPager ctrl = Parent.FindControl(CloneFrom) as AspNetPager;
   52                 if (null == ctrl)
   53                 {
   54                     string errStr = SR.GetString("clonefromexeption") ??
   55                                     "The control \" %controlID% \" does not exist or is not of type Wuqi.Webdiyer.AspNetPager!";
   56                     throw new ArgumentException(errStr.Replace("%controlID%", CloneFrom), "CloneFrom");
   57                 }
   58                 if (null != ctrl.cloneFrom && this == ctrl.cloneFrom)
   59                 {
   60                     string errStr = SR.GetString("recusiveclonefrom") ??
   61                                     "Invalid value for the CloneFrom property, AspNetPager controls can not to be cloned recursively!";
   62                     throw new ArgumentException(errStr, "CloneFrom");
   63                 }
   64                 cloneFrom = ctrl;
   65                 CssClass = cloneFrom.CssClass;
   66                 Width = cloneFrom.Width;
   67                 Height = cloneFrom.Height;
   68                 HorizontalAlign = cloneFrom.HorizontalAlign;
   69                 BackColor = cloneFrom.BackColor;
   70                 BackImageUrl = cloneFrom.BackImageUrl;
   71                 BorderColor = cloneFrom.BorderColor;
   72                 BorderStyle = cloneFrom.BorderStyle;
   73                 BorderWidth = cloneFrom.BorderWidth;
   74                 Font.CopyFrom(cloneFrom.Font);
   75                 ForeColor = cloneFrom.ForeColor;
   76                 EnableViewState = cloneFrom.EnableViewState;
   77                 Enabled = cloneFrom.Enabled;
   78             }
   79         }
   80 
   81         /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Method[@name="OnLoad"]/*'/>
   82         protected override void OnLoad(EventArgs e)
   83         {
   84             if (UrlPaging)
   85             {
   86                 currentUrl = Page.Request.Path;
   87                 queryString = Page.Request.ServerVariables["Query_String"];
   88                 if (!Page.IsPostBack && cloneFrom == null)
   89                 {
   90                     int index;
   91                     int.TryParse(Page.Request.QueryString[UrlPageIndexName],out index);
   92                     if (index <= 0)
   93                         index = 1;
   94                     else if(ReverseUrlPageIndex)
   95                         index = PageCount - index + 1;
   96                     PageChangingEventArgs args = new PageChangingEventArgs(index);
   97                     OnPageChanging(args);
   98                 }
   99             }
  100             else
  101             {
  102                 inputPageIndex = Page.Request.Form[UniqueID + "_input"];
  103             }
  104             base.OnLoad(e);
  105         }
  106 
  107         /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Method[@name="OnPreRender"]/*'/>
  108         protected override void OnPreRender(EventArgs e)
  109         {
  110             if (PageCount > 1)
  111             {
  112                 if ((ShowPageIndexBox == ShowPageIndexBox.Always) || (ShowPageIndexBox == ShowPageIndexBox.Auto && PageCount >= ShowBoxThreshold))
  113                 {
  114                     StringBuilder sb = new StringBuilder("<script language=\"Javascript\" type=\"text/javascript\"><!--\n");
  115                     if (UrlPaging)
  116                     {
  117                         sb.Append("function ANP_goToPage(boxEl){if(boxEl!=null){var pi;if(boxEl.tagName==\"SELECT\")");
  118                         sb.Append("{pi=boxEl.options[boxEl.selectedIndex].value;}else{pi=boxEl.value;}");
  119                         if(string.IsNullOrEmpty(UrlPagingTarget))
  120                             sb.Append("location.href=\"").Append(GetHrefString(-1)).Append("\"");
  121                         else
  122                             sb.Append("window.open(\"").Append(GetHrefString(-1)).Append("\",\"").Append(UrlPagingTarget).Append("\")");
  123                         sb.Append(";}}\n");
  124                     }
  125                     if (PageIndexBoxType == PageIndexBoxType.TextBox)
  126                     {
  127                         string ciscript = SR.GetString("checkinputscript");
  128                         if (ciscript != null)
  129                         {
  130                             ciscript = ciscript.Replace("%PageIndexOutOfRangeErrorMessage%", PageIndexOutOfRangeErrorMessage);
  131                             ciscript = ciscript.Replace("%InvalidPageIndexErrorMessage%", InvalidPageIndexErrorMessage);
  132                         }
  133                         sb.Append(ciscript).Append("\n");
  134                         string keyScript = SR.GetString("keydownscript");
  135                         sb.Append(keyScript);
  136                     }
  137                     sb.Append("\n--></script>");
  138                     Type ctype = GetType();
  139                     ClientScriptManager cs = Page.ClientScript;
  140                     if (!cs.IsClientScriptBlockRegistered(ctype, "anp_script"))
  141                         cs.RegisterClientScriptBlock(ctype, "anp_script", sb.ToString());
  142                 }
  143             }
  144             base.OnPreRender(e);
  145         }
  146 
  147         /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Method[@name="AddAttributesToRender"]/*'/>
  148         protected override void AddAttributesToRender(HtmlTextWriter writer)
  149         {
  150             if (Page != null && !UrlPaging)
  151                 Page.VerifyRenderingInServerForm(this);
  152             base.AddAttributesToRender(writer);
  153         }
  154 
  155         /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Method[@name="RenderBeginTag"]/*'/>
  156         public override void RenderBeginTag(HtmlTextWriter writer)
  157         {
  158             bool showPager = (PageCount > 1 || (PageCount <= 1 && AlwaysShow));
  159             writer.WriteLine();
  160             writer.Write("<!-- ");
  161             writer.Write("AspNetPager " + VersionNumber + "  Copyright:2003-2010 BoYang Computer Co., Ltd. (http://en.webdiyer.com)");
  162             writer.WriteLine(" -->");
  163             if (!showPager)
  164             {
  165                 writer.Write("<!--");
  166                 writer.Write(SR.GetString("autohideinfo"));
  167                 writer.Write("-->");
  168             }
  169             else
  170                 base.RenderBeginTag(writer);
  171         }
  172 
  173         /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Method[@name="RenderEndTag"]/*'/>
  174         public override void RenderEndTag(HtmlTextWriter writer)
  175         {
  176             if (PageCount > 1 || (PageCount <= 1 && AlwaysShow))
  177                 base.RenderEndTag(writer);
  178             writer.WriteLine();
  179             writer.Write("<!-- ");
  180             writer.Write("AspNetPager " + VersionNumber + "  Copyright:2003-2010 BoYang Computer Co., Ltd. (http://en.webdiyer.com)");
  181             writer.WriteLine(" -->");
  182             writer.WriteLine();
  183         }
  184 
  185 
  186         /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Method[@name="RenderContents"]/*'/>
  187         protected override void RenderContents(HtmlTextWriter writer)
  188         {
  189             if (PageCount <= 1 && !AlwaysShow)
  190                 return;
  191             writer.Indent = 0;
  192             if (ShowCustomInfoSection != ShowCustomInfoSection.Never)
  193             {
  194                 if (LayoutType == LayoutType.Table)
  195                 {
  196                     writer.AddAttribute(HtmlTextWriterAttribute.Width, "100%");
  197                     writer.AddAttribute(HtmlTextWriterAttribute.Style, Style.Value);
  198                     if (Height != Unit.Empty)
  199                         writer.AddStyleAttribute(HtmlTextWriterStyle.Height, Height.ToString());
  200                     writer.AddAttribute(HtmlTextWriterAttribute.Border, "0");
  201                     writer.AddAttribute(HtmlTextWriterAttribute.Cellpadding, "0");
  202                     writer.AddAttribute(HtmlTextWriterAttribute.Cellspacing, "0");
  203                     writer.RenderBeginTag(HtmlTextWriterTag.Table); //<table>
  204                     writer.RenderBeginTag(HtmlTextWriterTag.Tr); //<tr>
  205                 }
  206                 if (ShowCustomInfoSection == ShowCustomInfoSection.Left)
  207                 {
  208                     RenderCustomInfoSection(writer);
  209                     RenderNavigationSection(writer);
  210                 }
  211                 else
  212                 {
  213                     RenderNavigationSection(writer);
  214                     RenderCustomInfoSection(writer);
  215                 }
  216                 if (LayoutType == LayoutType.Table)
  217                 {
  218                     writer.RenderEndTag(); //</tr>
  219                     writer.RenderEndTag(); //</table>
  220                 }
  221             }
  222             else
  223                 RenderPagingElements(writer);
  224         }
  225 
  226 
  227         #endregion
  228 
  229 
  230     }
  231 
  232     #endregion
  233 
  234 
  235     #region PageChangingEventHandler Delegate
  236     /// <include file='AspNetPagerDocs.xml' path='AspNetPagerDoc/Delegate[@name="PageChangingEventHandler"]/*'/>
  237     public delegate void PageChangingEventHandler(object src,PageChangingEventArgs e);
  238 
  239     #endregion
  240 
  241 }