.Net分页控件发布.net -电脑资料

电脑资料 时间:2019-01-01 我要投稿
【www.unjs.com - 电脑资料】

    由于.net自带的分页功能极其死板,自定义性不强不能满足 需求 俺花了一个多星期的时间 写成的一个.net分页控件 特性: 1、支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以 2、支持url方式分页,url分页的每一页都可以被搜索引

   

    由于.net自带的分页功能极其死板,自定义性不强不能满足需求

    俺花了一个多星期的时间 写成的一个.net分页控件

    特性:

    1、支持datagrid,datalist等分种数据显示控件,理论上只要有datasource的控件都可以

    2、支持url方式分页,url分页的每一页都可以被搜索引擎搜到,并且支持url重写

    3、控件样式可自定义

    4、封装完全,使用过程序只需写一行代码

    <PRE>1 /******************************************************************</p><p>    2 ** 文件名:Pager.cs</p><p>    3 ** 创建人:杨响武</p><p>    4 ** 日 期:2005年7月27日</p><p>    5 ** 修改人:</p><p>    6 ** 日 期:</p><p>    7 ** 描 述:</p><p>    8 **</p><p>    9 **----------------------------------------------------------------</p><p>    10 ******************************************************************/</p><p>    11</p><p>    12 using System;</p><p>    13 using System.Web.UI.WebControls;</p><p>    14 using System.Web.UI.HtmlControls;</p><p>    15 using System.Web;</p><p>    16 using System.Web.UI;</p><p>    17 using System.Text.RegularExpressions;</p><p>    18</p><p>    19 namespace MyCompany.Controls</p><p>    20 {</p><p>    21    ///<SUMMARY></p><p>    22    /// 分页控件</p><p>    23    ///</SUMMARY></p><p>    24    public class Pager : Label, INamingContainer</p><p>    25    {</p><p>    26        #region 成员变量和构造函数</p><p>    27        HttpContext context = HttpContext.Current;</p><p>    28        Label countLabel;</p><p>    29        HyperLink previousButton;</p><p>    30        HyperLink nextButton;</p><p>    31        HyperLink firstButton;</p><p>    32        HyperLink lastButton;</p><p>    33        HyperLink[] pagingLinkButtons;</p><p>    34</p><p>    35        public override ControlCollection Controls</p><p>    36        {</p><p>    37            get</p><p>    38            {</p><p>    39                EnsureChildControls();</p><p>    40                return base.Controls;</p><p>    41            }</p><p>    42        }</p><p>    43</p><p>    44        protected override void CreateChildControls()</p><p>    45        {</p><p>    46            Controls.Clear();</p><p>    47</p><p>    48            AddCountLabel();</p><p>    49</p><p>    50            AddPageButtons();</p><p>    51</p><p>    52            AddPreviousNextHyperLinks();</p><p>    53</p><p>    54            AddFirstLastHyperLinks();</p><p>    55        }</p><p>    56        #endregion</p><p>    57</p><p>    58        #region 呈现方法</p><p>    59        protected override void Render(HtmlTextWriter writer)</p><p>    60        {</p><p>    61 //           修改总页数小于等于1的时候不呈现任何控件</p><p>    62 //           int totalPages = CalculateTotalPages();</p><p>    63 //</p><p>    64 //           if (totalPages <= 1)</p><p>    65 //               return;</p><p>    66</p><p>    67            AddAttributesToRender(writer);</p><p>    68</p><p>    69            writer.AddAttribute(HtmlTextWriterAttribute.Class, this.CssClass, false);</p><p>    70</p><p>    71            RenderCountLabel(writer);</p><p>    72</p><p>    73            RenderFirst(writer);</p><p>    74</p><p>    75            RenderPrevious(writer);</p><p>    76</p><p>    77            RenderPagingButtons(writer);</p><p>    78</p><p>    79            RenderNext(writer);</p><p>    80</p><p>    81            RenderLast(writer);</p><p>    82        }</p><p>    83</p><p>    84        void RenderCountLabel(HtmlTextWriter writer)</p><p>    85        {</p><p>    86            countLabel.RenderControl(writer);</p><p>    87</p><p>    88            LiteralControl l = new LiteralControl(" ");</p><p>    89            l.RenderControl(writer);</p><p>    90        }</p><p>    91</p><p>    92        void RenderFirst (HtmlTextWriter writer)</p><p>    93        {</p><p>    94            firstButton.RenderControl(writer);</p><p>    95</p><p>    96            LiteralControl l = new LiteralControl(" ");</p><p>    97            l.RenderControl(writer);</p><p>    98        }</p><p>    99</p><p>    100        void RenderLast (HtmlTextWriter writer)</p><p>    101        {</p><p>    102            lastButton.RenderControl(writer);</p><p>    103</p><p>    104            LiteralControl l = new LiteralControl(" ");</p><p>    105            l.RenderControl(writer);</p><p>    106        }</p><p>    107</p><p>    108        void RenderPrevious (HtmlTextWriter writer)</p><p>    109        {</p><p>    110            previousButton.RenderControl(writer);</p><p>    111</p><p>    112            LiteralControl l = new LiteralControl(" ");</p><p>    113            l.RenderControl(writer);</p><p>    114        }</p><p>    115</p><p>    116        void RenderNext(HtmlTextWriter writer)</p><p>    117        {</p><p>    118            nextButton.RenderControl(writer);</p><p>    119</p><p>    120            LiteralControl l = new LiteralControl(" ");</p><p>    121            l.RenderControl(writer);</p><p>    122        }</p><p>    123</p><p>    124        private void RenderButtonRange(int start, int end, HtmlTextWriter writer)</p><p>    125        {</p><p>    126            for (int i = start; i < end; i++)</p><p>    127            {</p><p>    128                if (PageIndex == i)</p><p>    129                {</p><p>    130                    Literal l = new Literal();</p><p>    131                    l.Text = "" + (i + 1).ToString() + "";</p><p>    132</p><p>    133                    l.RenderControl(writer);</p><p>    134                }</p><p>    135                else</p><p>    136                {</p><p>    137                    pagingLinkButtons[i].RenderControl(writer);</p><p>    138                }</p><p>    139                if (i < (end - 1))</p><p>    140                    writer.Write(" ");</p><p>    141            }</p><p>    142</p><p>    143            LiteralControl l1 = new LiteralControl(" ");</p><p>    144            l1.RenderControl(writer);</p><p>    145        }</p><p>    146</p><p>    147        private void RenderPagingButtons(HtmlTextWriter writer)</p><p>    148        {</p><p>    149            int totalPages;</p><p>    150</p><p>    151            totalPages = CalculateTotalPages();</p><p>    152</p><p>    153            if (totalPages <= 10)</p><p>    154            {</p><p>    155                RenderButtonRange(0, totalPages, writer);</p><p>    156            }</p><p>    157            else</p><p>    158            {</p><p>    159                int lowerBound = (PageIndex - 4);</p><p>    160                int upperBount = (PageIndex + 6);</p><p>    161</p><p>    162                if (lowerBound <= 0)</p><p>    163                    lowerBound = 0;</p><p>    164</p><p>    165                if (PageIndex <= 4)</p><p>    166                    RenderButtonRange(0, 10, writer);</p><p>    167</p><p>    168                else if (PageIndex < (totalPages - 5))</p><p>    169                    RenderButtonRange(lowerBound, (PageIndex + 6), writer);</p><p>    170</p><p>    171                else if (PageIndex >= (totalPages - 5))</p><p>    172                    RenderButtonRange((totalPages - 10), totalPages, writer);</p><p>    173            }</p><p>    174        }</p><p>    175</p><p>    176        #endregion</p><p>    177</p><p>    178        #region 控件树方法</p><p>    179        ///<SUMMARY></p><p>    180        /// 信息标签</p><p>    181        ///</SUMMARY></p><p>    182        void AddCountLabel()</p><p>    183        {</p><p>    184            countLabel = new Label();</p><p>    185            countLabel.ID = "countLabel";</p><p>    186            countLabel.Text = string.Format(text, CalculateTotalPages().ToString("n0"));</p><p>    187</p><p>    188            Controls.Add(countLabel);</p><p>    189        }</p><p>    190</p><p>    191        private void AddPageButtons()</p><p>    192        {</p><p>    193            pagingLinkButtons = new HyperLink[CalculateTotalPages()];</p><p>    194</p><p>    195            for (int i = 0; i < pagingLinkButtons.Length; i++)</p><p>    196            {</p><p>    197                pagingLinkButtons[i] = new HyperLink();</p><p>    198                pagingLinkButtons[i].EnableViewState = false;</p><p>    199                pagingLinkButtons[i].Text = (i + 1).ToString();</p><p>    200                pagingLinkButtons[i].ID = i.ToString();</p><p>    201                pagingLinkButtons[i].CssClass = linkCss;</p><p>    202                pagingLinkButtons[i].NavigateUrl = GetHrefString(i);</p><p>    203</p><p>    204                Controls.Add(pagingLinkButtons[i]);</p><p>    205            }</p><p>    206        }</p><p>    207</p><p>    208        ///<SUMMARY></p><p>    209        /// 首页末页</p><p>    210        ///</SUMMARY></p><p>    211        void AddFirstLastHyperLinks()</p><p>    212        {</p><p>    213            firstButton = new HyperLink();</p><p>    214            firstButton.ID = "First";</p><p>    215            firstButton.Text = "首页";</p><p>    216            if(PageIndex != 0 && CalculateTotalPages() > 0)</p><p>    217            {</p><p>    218                firstButton.NavigateUrl = GetHrefString(0);</p><p>    219            }</p><p>    220            else</p><p>    221            {</p><p>    222                firstButton.Enabled = false;</p><p>    223            }</p><p>    224</p><p>    225            Controls.Add(firstButton);</p><p>    226</p><p>    227            lastButton = new HyperLink();</p><p>    228            lastButton.ID = "Last";</p><p>    229            lastButton.Text = "末页";</p><p>    230            if(PageIndex != CalculateTotalPages() - 1)</p><p>    231            {</p><p>    232                lastButton.NavigateUrl = GetHrefString(CalculateTotalPages() - 1);</p><p>    233            }</p><p>    234            else</p><p>    235            {</p><p>    236                lastButton.Enabled = false;</p><p>    237            }</p><p>    238            Controls.Add(lastButton);</p><p>    239        }</p><p>    240</p><p>    241        ///<SUMMARY></p><p>    242        /// 上一页下一页</p><p>    243        ///</SUMMARY></p><p>    244        void AddPreviousNextHyperLinks()</p><p>    245        {</p><p>    246            previousButton = new HyperLink();</p><p>    247            previousButton.ID = "Prev";</p><p>    248            previousButton.Text = "上一页";</p><p>    249            if (HasPrevious)</p><p>    250            {</p><p>    251                previousButton.NavigateUrl = GetHrefString(PageIndex - 1);</p><p>    252            }</p><p>    253            else</p><p>    254            {</p><p>    255                previousButton.Enabled = false;</p><p>    256            }</p><p>    257            Controls.Add(previousButton);</p><p>    258</p><p>    259            nextButton = new HyperLink();</p><p>    260            nextButton.ID = "Next";</p><p>    261            nextButton.Text = "下一页";</p><p>    262            if(HasNext)</p><p>    263            {</p><p>    264                nextButton.NavigateUrl = GetHrefString(PageIndex + 1);</p><p>    265            }</p><p>    266            else</p><p>    267            {</p><p>    268                nextButton.Enabled = false;</p><p>    269            }</p><p>    270            Controls.Add(nextButton);</p><p>    271        }</p><p>    272        #endregion</p><p>    273</p><p>    274        #region 私有属性</p><p>    275        private bool HasPrevious</p><p>    276        {</p><p>    277            get</p><p>    278            {</p><p>    279                if (PageIndex > 0)</p><p>    280                    return true;</p><p>    281</p><p>    282                return false;</p><p>    283            }</p><p>    284        }</p><p>    285</p><p>    286        private bool HasNext</p><p>    287        {</p><p>    288            get</p><p>    289            {</p><p>    290                if (PageIndex + 1 < CalculateTotalPages() )</p><p>    291                    return true;</p><p>    292</p><p>    293                return false;</p><p>    294            }</p><p>    295        }</p><p>    296        #endregion</p><p>    297</p><p>    298        #region 帮助方法和公共属性</p><p>    299</p><p>    300        ///<SUMMARY></p><p>    301        /// 获取分页导航按钮的超链接字符串</p><p>    302        ///</SUMMARY></p><p>    303        ///<PARAM name="pageIndex">该分页按钮相对应的页索引</PARAM></p><p>    304        ///<RETURNS>分页导航按钮的超链接字符串</RETURNS></p><p>    305        private string GetHrefString(int pageIndex)</p><p>    306        {</p><p>    307            string url = Page.Request.RawUrl;</p><p>    308</p><p>    309            if (Regex.IsMatch(url, @"(\d+).shtml", RegexOptions.IgnoreCase))</p><p>    310            {</p><p>    311                url = Regex.Replace(url, @"(\d+).shtml", pageIndex + ".shtml");</p><p>    312            }</p><p>    313</p><p>    314            if (Regex.IsMatch(url, @"PageIndex=(\d+)", RegexOptions.IgnoreCase))</p><p>    315            {</p><p>    316                url = Regex.Replace(url, @"PageIndex=(\d+)", "PageIndex=" + pageIndex.ToString());</p><p>    317            }</p><p>    318</p><p>    319            return Page.Server.UrlPathEncode(url);</p><p>    320        }</p><p>    321</p><p>    322        public int CalculateTotalPages()</p><p>    323        {</p><p>    324            int totalPagesAvailable;</p><p>    325</p><p>    326            if (TotalRecords == 0)</p><p>    327                return 0;</p><p>    328</p><p>    329            totalPagesAvailable = TotalRecords / PageSize;</p><p>    330</p><p>    331            if ((TotalRecords % PageSize) > 0)</p><p>    332                totalPagesAvailable++;</p><p>    333</p><p>    334            return totalPagesAvailable;</p><p>    335        }</p><p>    336</p><p>    337        ///<SUMMARY></p><p>    338        /// 当前页</p><p>    339        ///</SUMMARY></p><p>    340        public int PageIndex</p><p>    341        {</p><p>    342            get</p><p>    343            {</p><p>    344                int _pageIndex = 0;</p><p>    345</p><p>    346                if ((!Page.IsPostBack) && (context.PageIndex > 0))</p><p>    347                    _pageIndex = context.PageIndex;</p><p>    348                else</p><p>    349                    _pageIndex = Convert.ToInt32(ViewState["PageIndex"]);</p><p>    350</p><p>    351                if (_pageIndex < 0)</p><p>    352                    return 0;</p><p>    353                else</p><p>    354                {</p><p>    355                    if (_pageIndex > CalculateTotalPages()-1)</p><p>    356                        return CalculateTotalPages()-1;</p><p>    357                    else</p><p>    358                        return _pageIndex;</p><p>    359                }</p><p>    360            }</p><p>    361            set</p><p>    362            {</p><p>    363                ViewState["PageIndex"] = value;</p><p>    364            }</p><p>    365        }</p><p>    366</p><p>    367        ///<SUMMARY></p><p>    368        /// 每页记录数</p><p>    369        ///</SUMMARY></p><p>    370        public int PageSize</p><p>    371        {</p><p>    372            get</p><p>    373            {</p><p>    374                int pageSize = Convert.ToInt32(ViewState["PageSize"]);</p><p>    375</p><p>    376                if (pageSize == 0)</p><p>    377                {</p><p>    378                    return 10;</p><p>    379                }</p><p>    380</p><p>    381                return pageSize;</p><p>    382            }</p><p>    383            set</p><p>    384            {</p><p>    385                ViewState["PageSize"] = value;</p><p>    386            }</p><p>    387</p><p>    388        }</p><p>    389</p><p>    390        ///<SUMMARY></p><p>    391        /// 总记录数</p><p>    392        ///</SUMMARY></p><p>    393        public int TotalRecords</p><p>    394        {</p><p>    395            get</p><p>    396            {</p><p>    397                return Convert.ToInt32(ViewState["TotalRecords"]);</p><p>    398            }</p><p>    399            set</p><p>    400            {</p><p>    401                ViewState["TotalRecords"] = value;</p><p>    402            }</p><p>    403        }</p><p>    404</p><p>    405        private string text = "共{0}页";</p><p>    406</p><p>    407        private string linkCss = "";</p><p>    408        ///<SUMMARY></p><p>    409        /// 链接样式</p><p>    410        ///</SUMMARY></p><p>    411        public string LinkCss</p><p>    412        {</p><p>    413            get { return linkCss; }</p><p>    414            set { linkCss = value;}</p><p>    415        }</p><p>    416</p><p>    417        private string textCss = "";</p><p>    418        ///<SUMMARY></p><p>    419        /// 文字样式</p><p>    420        ///</SUMMARY></p><p>    421        public string TextCss</p><p>    422        {</p><p>    423            get { return textCss; }</p><p>    424            set { textCss = value;}</p><p>    425        }</p><p>    426</p><p>    427        public string TextFormat</p><p>    428        {</p><p>    429            get</p><p>    430            {</p><p>    431                return text;</p><p>    432            }</p><p>    433            set</p><p>    434            {</p><p>    435                text = value;</p><p>    436            }</p><p>    437        }</p><p>    438</p><p>    439        #endregion</p><p>    440    }</p><p>    441 }</p><p>    442</p><p>    </PRE>

    在页面上只需要向下面这样写:

    <PRE>1 <%@ Control Language="c#" %></p><p>    2 <%@ Register TagPrefix="Anchor" Namespace="MyCompany.Controls" Assembly="MyCompany.Controls" %></p><p>    3 <ANCHOR:PAGER id="Pager1" runat="server"></ANCHOR:PAGER></PRE>

(责任编辑:海纳百川 qlmzl11268@hotmail.com   TEL:(010)68476606-8007)

    原文转自:http://www.ltesting.net

最新文章