一个简单的分页控件,用来自定义分页用的

翻译|其它|编辑:郝浩|2006-03-20 09:44:00.000|阅读 1278 次

概述:

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>


   在做项目的过程中,最初采用Datagrid的默任的分页方式分页,后来发现对于大的数据量速度很慢,NET进程占用系统资源也很大,后来写了个分页的存储过程,每次取数据都只取当前页的,分页是分好了,但是发现翻页就没那么方便了,于是自己写了个简单的分页控件,代码如下(编译以后直接形成dll就可以用)。
程序代码:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace PageInfoControl
{
    /// <summary>
    /// WebCustomControl1 的摘要说明。
    /// </summary>

    [DefaultProperty("TotalRecord"),
    ToolboxData("<{0}:PageInfo runat=server></{0}:PageInfo>")]
    public class PageInfo : System.Web.UI.WebControls.WebControl,IPostBackEventHandler
     {
        #region Construct method
        /// <summary>
        /// 构造函数
        /// </summary>
        public PageInfo():base(HtmlTextWriterTag.Div)
        {

        }
        #endregion

        #region Variables and Constants

        public event EventHandler ChangePageClick;
        private string _BarBackGroundColor = "#F1F1F1";
        private string _BarLinkColor = "Navy";
        private string _BarCurrentColor = "#EEEEEE";
        private int _TotalRecord = 0;
        private int _TotalPage = 0;
        private int _PageSize = 0;
        private int _CurrentPageIndex = 1;
        private int _ItemSize = 10;

        #endregion

        #region Properties

        [
            Description("分页条背景色"),
            Bindable(true),
            Category("Appearance"),
            DefaultValue("#F1F1F1")
        ]
    public string BarBackGroundColor
        {
            get{return _BarBackGroundColor;}
            set{_BarBackGroundColor = value;}
        }

    [
        Description("分页条带链接数字颜色"),
        Bindable(true),
        Category("Appearance"),
        DefaultValue("Navy")
    ]
    public string BarLinkColor
    {
        get{return _BarLinkColor;}
        set{_BarLinkColor = value;}
    }

    [
        Description("分页条当前页数字颜色"),
        Bindable(true),
        Category("Appearance"),
        DefaultValue("#EEEEEE")
    ]
    public string BarCurrentColor
    {
        get{return _BarCurrentColor;}
        set{_BarCurrentColor = value;}
    }

    [
        Description("总记录数"),
        Bindable(false),
        Category("Behavior"),
        DefaultValue(0)
    ]
    public int TotalRecord
    {
        get{return _TotalRecord;}
    set
    {
        foreach(char c in System.Convert.ToString(value))
        {
            if (!Char.IsNumber(c))
            {
                _TotalRecord = 0;
                 break;
             }
          }
       _TotalRecord = value;
     }
   }

   [
     Description("每页显示记录数"),
     Bindable(true),
     Category("Behavior"),
     DefaultValue(0)
  ]
   public int PageSize
    {
      get{return _PageSize;}
      set
      {
        foreach(char c in System.Convert.ToString(value))
         {
           if (!Char.IsNumber(c))
            {
                _PageSize = 0;
                break;
            }
         }
      _PageSize = value;
   }
}

[
   Description("总页数"),
   Bindable(true),
   Category("Behavior"),
   DefaultValue(0)
]
public int TotalPage
  {
     get{return _TotalPage;}
  }

[
    Description("数字规格"),
    Bindable(true),
    Category("Behavior"),
    DefaultValue(10)
]
public int ItemSize
{
    get{return _ItemSize;}
    set
     {
        foreach(char c in System.Convert.ToString(value))
          {
              if (!Char.IsNumber(c))
               {
                  _ItemSize = 10;
                  break;
               }
           }
       _ItemSize = value;
    }
}

[
    Description("当前页值"),
    Bindable(true),
    Category("Behavior"),
    DefaultValue(1)
]
public int CurrentPageIndex
{
    get{return _CurrentPageIndex;}
    set{_CurrentPageIndex = value;}
}


#endregion

//定义Div的样式
protected override void AddAttributesToRender(HtmlTextWriter writer)
{
     writer.AddStyleAttribute("White-space","nowrap");
     writer.AddStyleAttribute("Padding-Top","2px");
     writer.AddStyleAttribute("Padding-Bottom","2px");
     writer.AddStyleAttribute("Width",Width.ToString());
     writer.AddStyleAttribute("Height",Height.ToString());
     base.AddAttributesToRender (writer);
}

protected virtual void OnPageChangeClick(EventArgs e)
{
    if (ChangePageClick != null)
     {
        ChangePageClick(this, e);
     }
}

public void RaisePostBackEvent(string eventArgument)
{
      int PageIndex = int.Parse(eventArgument);
      this._CurrentPageIndex = PageIndex;
      OnPageChangeClick(new EventArgs());
}

/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>

protected override void RenderContents(HtmlTextWriter output)
{
     this._TotalPage = ((this.TotalRecord / PageSize) * this.PageSize == this.TotalRecord)?   (this.TotalRecord / this.PageSize):((this.TotalRecord / this.PageSize) + 1);
     int BeginRecord = (this.CurrentPageIndex - 1) * this.PageSize + 1;
     int EndRecord = this.CurrentPageIndex * this.PageSize;
     EndRecord = (EndRecord>this.TotalRecord)?this.TotalRecord:EndRecord;
     string PageInfo = "[共<font color=#CC0000>"+this.TotalPage.ToString()+"</font>页/当前第<font color=#CC0000>"+this.CurrentPageIndex.ToString()+"</font>页 共<font color=#CC0000>"+TotalRecord.ToString()+"</font>条记录,当前记录数<font color=#CC0000>"+BeginRecord.ToString()+"</font>到<font color=#CC0000>"+EndRecord.ToString()+"</font>]";
     string PageListStr = "";
     string PageIndexColor = "#0000C0";
     int SingleNumber = this.TotalPage - (TotalPage/ItemSize) * ItemSize; //得到分页后的尾数(比如:总共58页,按10页规格显示,则尾数为8)
     int IntPageForMax = (this.CurrentPageIndex - 1) / ItemSize;
     int MinInt = (1 + ItemSize * IntPageForMax);
     int MaxInt = ((IntPageForMax + 1) * ItemSize)>TotalPage?TotalPage:((IntPageForMax + 1) * ItemSize);
     if(this.TotalRecord == 0 || this.TotalPage == 0)
      {
         PageListStr = "<font color="+PageIndexColor+">0</font>";
         PageListStr = PageListStr + " [共<font color=#CC0000>0</font>页/当前第<font       color=#CC0000>0</font>页 共<font color=#CC0000>0</font>条记录,当前记录数<font  color=#CC0000>0</font>到<font color=#CC0000>0</font>]";
output.Write(PageListStr);
     }
    else
     {
        if(this.TotalPage <= this.ItemSize)
         {
            for(int i = 1;i <= TotalPage;i++)
              {
                  PageIndexColor = CurrentPageIndex==i?"#CC0000":"#0000C0";
                     if(CurrentPageIndex == i)
                        PageListStr = PageListStr + " <a title='当前为第『"+i+"』页' href='#' id=\"" + this.UniqueID + "\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";
                     else
                        PageListStr = PageListStr + " <a title='点击转到第『"+i+"』页' id=\"" + this.UniqueID + "\" href=\"javascript:" + Page.GetPostBackEventReference(this,i.ToString()) +"\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";
               }
            PageListStr = PageListStr ==""?"<font color="+PageIndexColor+">0</font>":PageListStr;
            PageListStr = PageListStr + " "+PageInfo;
            output.Write(PageListStr);
          }
      else
       {
          for(int i = MinInt;i <= MaxInt;i++)
           {
              PageIndexColor = CurrentPageIndex==i?"#CC0000":"#0000C0";
              if(CurrentPageIndex == i)
                  PageListStr = PageListStr + " <a title='当前为第『"+i+"』页' href='#' id=\"" + this.UniqueID + "\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";
              else
                  PageListStr = PageListStr + " <a title='点击转到第『"+i+"』页' id=\"" + this.UniqueID + "\" href=\"javascript:" + Page.GetPostBackEventReference(this,i.ToString()) +"\"><font color="+PageIndexColor+">"+i.ToString()+"</font></a>";
 }
    //当当前页数小于ItemSize且总的页数大于ItemSize时
if(CurrentPageIndex <= ItemSize && TotalPage > ItemSize)
    {
        PageListStr = PageListStr + " <a id=\"" + this.UniqueID + "\" title='点击转到第     『"+System.Convert.ToString(ItemSize + 1)+"』页' href=\"javascript:" +   Page.GetPostBackEventReference(this,System.Convert.ToString(ItemSize + 1)) +"\">>></a>";
   }
    //当当前页数大于ItemSize,且总的页数减去当前页数大于等于尾数值页数时
   if(this.CurrentPageIndex > ItemSize && (TotalPage - this.CurrentPageIndex) >= SingleNumber)
    {
       int MultiMinPageIndex = (IntPageForMax * ItemSize);
       int MultiMaxPageIndex = ((IntPageForMax+1) * ItemSize) + 1;
        PageListStr = "<a id=\"" + this.UniqueID + "\" title='点击转到第『"+MultiMinPageIndex+"』页' href=\"javascript:" + Page.GetPostBackEventReference(this,MultiMinPageIndex.ToString()) +"\"><<</a>" + PageListStr.Trim() + "<a id=\"" + this.UniqueID + "\" title='点击转到第『"+MultiMaxPageIndex+"』页' href=\"javascript:" + Page.GetPostBackEventReference(this,MultiMaxPageIndex.ToString()) +"\">>></a>";
    }
    //当当前页数大于ItemSize,且总的页数减去当前页数大于等于尾数值页数时
   if(CurrentPageIndex > 10 && (TotalPage - CurrentPageIndex) < SingleNumber)
     {
         int MultiMinPageIndex = (IntPageForMax * ItemSize);
         PageListStr = "<a id=\"" + this.UniqueID + "\" title='点击转到第『"+MultiMinPageIndex+"』页' href=\"javascript:" + Page.GetPostBackEventReference(this,MultiMinPageIndex.ToString()) +"\"><<</a>" + PageListStr.Trim();
    }

        PageListStr = PageListStr ==""?"<font color="+PageIndexColor+">0</font>":PageListStr;
        PageListStr = PageListStr + " "+PageInfo;
        output.Write(PageListStr);
        }
      }
    base.RenderContents(output);
   }
  }
}

控件中有几个相关的属性,在使用的时候,只需要指定:TotalRecord(总记录数)、PageSize(每页的数据记录数)、CurrentPageIndex(当前页面值)、ItemSize(分页条显示页面值的规格)
控件中有个ChangePageClick事件,可以利用“控件ID.CurrentPageIndex”属性来获取当前页面值。




标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@evget.com


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP