.Net分页控件发布(1)
点击次数:12 次 发布日期:2008-11-26 12:42:38 作者:源代码网
|
源代码网推荐 俺花了一个多星期的时间 写成的一个.net分页控件 源代码网推荐 源代码网推荐 特性: 源代码网推荐 1、支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以 源代码网推荐 2、支持url方式分页,url分页的每一页都可以被搜索引擎搜到,并且支持url重写 源代码网推荐 3、控件样式可自定义 源代码网推荐 4、封装完全,使用过程序只需写一行代码 源代码网推荐 源代码网推荐 1 /****************************************************************** 源代码网推荐 2 ** 文件名:Pager.cs 源代码网推荐 3 ** 创建人:杨响武 源代码网推荐 4 ** 日 期:2005年7月27日 源代码网推荐 5 ** 修改人: 源代码网推荐 6 ** 日 期: 源代码网推荐 7 ** 描 述: 源代码网推荐 8 ** 源代码网推荐 9 **---------------------------------------------------------------- 源代码网推荐 10 ******************************************************************/ 源代码网推荐 11 源代码网推荐 12 using System; 源代码网推荐 13 using System.Web.UI.WebControls; 源代码网推荐 14 using System.Web.UI.HtmlControls; 源代码网推荐 15 using System.Web; 源代码网推荐 16 using System.Web.UI; 源代码网推荐 17 using System.Text.RegularExpressions; 源代码网推荐 18 源代码网推荐 19 namespace MyCompany.Controls 源代码网推荐 20 { 源代码网推荐 21 /// <summary> 源代码网推荐 22 /// 分页控件 源代码网推荐 23 /// </summary> 源代码网推荐 24 public class Pager : Label, INamingContainer 源代码网推荐 25 { 源代码网推荐 26 #region 成员变量和构造函数 源代码网推荐 27 HttpContext context = HttpContext.Current; 源代码网推荐 28 Label countLabel; 源代码网推荐 29 HyperLink previousButton; 源代码网推荐 30 HyperLink nextButton; 源代码网推荐 31 HyperLink firstButton; 源代码网推荐 32 HyperLink lastButton; 源代码网推荐 33 HyperLink[] pagingLinkButtons; 源代码网推荐 34 源代码网推荐 35 public override ControlCollection Controls 源代码网推荐 36 { 源代码网推荐 37 get 源代码网推荐 38 { 源代码网推荐 39 EnsureChildControls(); 源代码网推荐 40 return base.Controls; 源代码网推荐 41 } 源代码网推荐 42 } 源代码网推荐 43 源代码网推荐 44 protected override void CreateChildControls() 源代码网推荐 45 { 源代码网推荐 46 Controls.Clear(); 源代码网推荐 47 源代码网推荐 48 AddCountLabel(); 源代码网推荐 49 源代码网推荐 50 AddPageButtons(); 源代码网推荐 51 源代码网推荐 52 AddPreviousNextHyperLinks(); 源代码网推荐 53 源代码网推荐 54 AddFirstLastHyperLinks(); 源代码网推荐 55 } 源代码网推荐 56 #endregion 源代码网推荐 57 源代码网推荐 58 #region 呈现方法 源代码网推荐 59 protected override void Render(HtmlTextWriter writer) 源代码网推荐 60 { 源代码网推荐 61 // 修改总页数小于等于1的时候不呈现任何控件 源代码网推荐 62 // int totalPages = CalculateTotalPages(); 源代码网推荐 63 // 源代码网推荐 64 // if (totalPages <= 1) 源代码网推荐 65 // return; 源代码网推荐 66 源代码网推荐 67 AddAttributesToRender(writer); 源代码网推荐 68 源代码网推荐 69 writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false); 源代码网推荐 70 源代码网推荐 71 RenderCountLabel(writer); 源代码网推荐 72 源代码网推荐 73 RenderFirst(writer); 源代码网推荐 74 源代码网推荐 75 RenderPrevious(writer); 源代码网推荐 76 源代码网推荐 77 RenderPagingButtons(writer); 源代码网推荐 78 源代码网推荐 79 RenderNext(writer); 源代码网推荐 80 源代码网推荐 81 RenderLast(writer); 源代码网推荐 82 } 源代码网推荐 83 源代码网推荐 84 void RenderCountLabel(HtmlTextWriter writer) 源代码网推荐 85 { 源代码网推荐 86 countLabel.RenderControl(writer); 源代码网推荐 87 源代码网推荐 88 LiteralControl l = new LiteralControl(" "); 源代码网推荐 89 l.RenderControl(writer); 源代码网推荐 90 } 源代码网推荐 91 源代码网推荐 92 void RenderFirst (HtmlTextWriter writer) 源代码网推荐 93 { 源代码网推荐 94 firstButton.RenderControl(writer); 源代码网推荐 95 源代码网推荐 96 LiteralControl l = new LiteralControl(" "); 源代码网推荐 97 l.RenderControl(writer); 源代码网推荐 98 } 源代码网推荐 99 源代码网推荐 100 void RenderLast (HtmlTextWriter writer) 源代码网推荐 101 { 源代码网推荐 102 lastButton.RenderControl(writer); 源代码网推荐 103 源代码网推荐 104 LiteralControl l = new LiteralControl(" "); 源代码网推荐 105 l.RenderControl(writer); 源代码网推荐 106 } 源代码网推荐 107 源代码网推荐 108 void RenderPrevious (HtmlTextWriter writer) 源代码网推荐 109 { 源代码网推荐 110 previousButton.RenderControl(writer); 源代码网推荐 111 源代码网推荐 112 LiteralControl l = new LiteralControl(" "); 源代码网推荐 113 l.RenderControl(writer); 源代码网推荐 114 } 源代码网推荐 115 源代码网推荐 116 void RenderNext(HtmlTextWriter writer) 源代码网推荐 117 { 源代码网推荐 118 nextButton.RenderControl(writer); 源代码网推荐 119 源代码网推荐 120 LiteralControl l = new LiteralControl(" "); 源代码网推荐 121 l.RenderControl(writer); 源代码网推荐 122 } 源代码网推荐 123 源代码网推荐 124 private void RenderButtonRange(int start, int end, HtmlTextWriter writer) 源代码网推荐 125 { 源代码网推荐 126 for (int i = start; i < end; i++) 源代码网推荐 127 { 源代码网推荐 128 if (PageIndex == i) 源代码网推荐 129 { 源代码网推荐 130 Literal l = new Literal(); 源代码网推荐 131 l.Text = "<font color =red>" + (i + 1).ToString() + "</font>"; 源代码网推荐 132 源代码网推荐 133 l.RenderControl(writer); 源代码网推荐 134 } 源代码网推荐 135 else 源代码网推荐 136 { 源代码网推荐 137 pagingLinkButtons[i].RenderControl(writer); 源代码网推荐 138 } 源代码网推荐 139 if (i < (end - 1)) 源代码网推荐 140 writer.Write(" "); 源代码网推荐 141 } 源代码网推荐 142 源代码网推荐 143 LiteralControl l1 = new LiteralControl(" "); 源代码网推荐 144 l1.RenderControl(writer); 源代码网推荐 145 } 源代码网推荐 146 源代码网推荐 147 private void RenderPagingButtons(HtmlTextWriter writer) 源代码网推荐 148 { 源代码网推荐 149 int totalPages; 源代码网推荐 150 源代码网推荐 151 totalPages = CalculateTotalPages(); 源代码网推荐 152 源代码网推荐 153 if (totalPages <= 10) 源代码网推荐 154 { 源代码网推荐 155 RenderButtonRange(0, totalPages, writer); 源代码网推荐 156 } 源代码网推荐 157 else 源代码网推荐 158 { 源代码网推荐 159 int lowerBound = (PageIndex - 4); 源代码网推荐 160 int upperBount = (PageIndex + 6); 源代码网推荐 161 源代码网推荐 162 if (lowerBound <= 0) 源代码网推荐 163 lowerBound = 0; 源代码网推荐 164 源代码网推荐 165 if (PageIndex <= 4) 源代码网推荐 166 RenderButtonRange(0, 10, writer); 源代码网推荐 167 源代码网推荐 168 else if (PageIndex < (totalPages - 5)) 源代码网推荐 169 RenderButtonRange(lowerBound, (PageIndex + 6), writer); 源代码网推荐 170 源代码网推荐 171 else if (PageIndex >= (totalPages - 5)) 源代码网推荐 172 RenderButtonRange((totalPages - 10), totalPages, writer); 源代码网推荐 173 } 源代码网推荐 174 } 源代码网推荐 175 源代码网推荐 176 #endregion 源代码网推荐 177 源代码网推荐 178 #region 控件树方法 源代码网推荐 179 /// <summary> 源代码网推荐 180 /// 信息标签 源代码网推荐 181 /// </summary> 源代码网推荐 182 void AddCountLabel() 源代码网推荐 183 { 源代码网推荐 184 countLabel = new Label(); 源代码网推荐 185 countLabel.ID = "countLabel"; 源代码网推荐 186 countLabel.Text = string.Format(text, CalculateTotalPages().ToString("n0")); 源代码网推荐 187 源代码网推荐 188 Controls.Add(countLabel); 源代码网推荐 189 } 源代码网推荐 190 源代码网推荐 191 private void AddPageButtons() 源代码网推荐 192 { 源代码网推荐 193 pagingLinkButtons = new HyperLink[CalculateTotalPages()]; 源代码网推荐 194 源代码网推荐 195 for (int i = 0; i < pagingLinkButtons.Length; i++) 源代码网推荐 196 { 源代码网推荐 197 pagingLinkButtons[i] = new HyperLink(); 源代码网推荐 198 pagingLinkButtons[i].EnableViewState = false; 源代码网推荐 199 pagingLinkButtons[i].Text = (i + 1).ToString(); 源代码网推荐 200 pagingLinkButtons[i].ID = i.ToString(); 源代码网推荐 201 pagingLinkButtons[i].CssClass = linkCss; 源代码网推荐 202 pagingLinkButtons[i].NavigateUrl = GetHrefString(i); 源代码网推荐 203 源代码网推荐 204 Controls.Add(pagingLinkButtons[i]); 源代码网推荐 205 } 源代码网推荐 206 } 源代码网推荐 207 源代码网推荐 208 /// <summary> 源代码网推荐 209 /// 首页末页 源代码网推荐 210 /// </summary> 源代码网推荐 211 void AddFirstLastHyperLinks() 源代码网推荐 212 { 源代码网推荐 213 firstButton = new HyperLink(); 源代码网推荐 214 firstButton.ID = "First"; 源代码网推荐 215 firstButton.Text = "首页"; 源代码网推荐 216 if(PageIndex != 0 && CalculateTotalPages() > 0) 源代码网推荐 217 { 源代码网推荐 218 firstButton.NavigateUrl = GetHrefString(0); 源代码网推荐 219 } 源代码网推荐 220 else 源代码网推荐 221 { 源代码网推荐 222 firstButton.Enabled = false; 源代码网推荐 223 } 源代码网推荐 224 源代码网推荐 225 Controls.Add(firstButton); 源代码网推荐 226 源代码网推荐 227 lastButton = new HyperLink(); 源代码网推荐 228 lastButton.ID = "Last"; 源代码网推荐 229 lastButton.Text = "末页"; 源代码网推荐 230 if(PageIndex != CalculateTotalPages() - 1) 源代码网推荐 231 { 源代码网推荐 232 lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1); 源代码网推荐 233 } 源代码网推荐 234 else 源代码网推荐 235 { 源代码网推荐 236 lastButton.Enabled = false; 源代码网推荐 237 } 源代码网推荐 238 Controls.Add(lastButton); 源代码网推荐 239 } 源代码网推荐 240 源代码网推荐 241 /// <summary> 源代码网推荐 242 /// 上一页下一页 源代码网推荐 243 /// </summary> 源代码网推荐 244 void AddPreviousNextHyperLinks() 源代码网推荐 245 { 源代码网推荐 246 previousButton = new HyperLink(); 源代码网推荐 247 previousButton.ID = "Prev"; 源代码网推荐 248 previousButton.Text = "上一页"; 源代码网推荐 249 if (HasPrevious) 源代码网推荐 250 { 源代码网推荐 251 previousButton.NavigateUrl = GetHrefString(PageIndex - 1); 源代码网推荐 252 } 源代码网推荐 253 else 源代码网推荐 254 { 源代码网推荐 255 previousButton.Enabled = false; 源代码网推荐 256 } 源代码网推荐 257 Controls.Add(previousButton); 源代码网推荐 258 源代码网推荐 259 nextButton = new HyperLink(); 源代码网推荐 260 nextButton.ID = "Next"; 源代码网推荐 261 nextButton.Text = "下一页"; 源代码网推荐 262 if(HasNext) 源代码网推荐 263 { 源代码网推荐 264 nextButton.NavigateUrl = GetHrefString(PageIndex + 1); 源代码网推荐 265 } 源代码网推荐 266 else 源代码网推荐 267 { 源代码网推荐 268 nextButton.Enabled = false; 源代码网推荐 269 } 源代码网推荐 270 Controls.Add(nextButton); 源代码网推荐 271 } 源代码网推荐 272 #endregion 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 源代码网推荐 做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。 源代码网推荐 源代码网供稿. |
