当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  .Net分页控件发布(1)

 .Net分页控件发布(1)

点击次数:12 次 发布日期:2008-11-26 12:42:38 作者:源代码网
源代码网推荐      由于.net自带的分页功能极其死板,自定义性不强不能满足需求
源代码网推荐  俺花了一个多星期的时间 写成的一个.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)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华