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 }