VS2005 自定义分页控件

前台ASPX页(可以绑定的控件是:DataGrid,GridView,Repeater,DataList等等)
1:先注册一下控件,不要跟我说看不懂下面这句
<%@ Register Assembly="CommonClass" Namespace="WebPageControls" TagPrefix="Ipage" %>

2:绑定,更加简单,在适合的位置放上这句分页代码:(还有些属性自己试试)
<Ipage:PagerBar ID="pbComment" runat="server" EnableViewState="False" PageSize="20"></Ipage:PagerBar>

3:后台绑定:(更加简单)
        int recordCount;//总记录数
        CategoryData cd = new CategoryData();
        List<CategoryInfo> ciList = cd.GetSoftList(this.pbComment.CurrentPage, this.pbComment.PageSize, out recordCount);//传递参数,必须要有这三个
        pbComment.RecordCount = recordCount;//因为是输出参数,所以得到他的总记录数
        GridView1.DataSource = ciList;//最后绑定
 GridView1.DataBind();

4:SQL语句
Create PROCEDURE [dbo].[SP_Soft_GetSoftList]
 @CurrentPage int, @PageSize int, @RecordCount int output
AS
 DECLARE @MinPage int, @MaxPage int
 SET @MinPage = (@CurrentPage - 1) * @PageSize + 1
 SET @MaxPage = @MinPage + @PageSize
 
 BEGIN
  SELECT * FROM (SELECT *, ROW_NUMBER() OVER(ORDER BY SoftID DESC) AS RowNumber FROM SoftInfo ) AS A WHERE RowNumber BETWEEN @MinPage AND @MaxPage
 
  SELECT @RecordCount = COUNT(SoftID) FROM Soft_Info
 END

注意:sql2005的新特性:ROW_NUMBER(),自己查帮助看看介绍,实在太爽了这个,SoftInfo 是表名.

cs代码:编译后就可以用
using System;
using System.Collections;
using System.Collections.Specialized;
using System.ComponentModel;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

[assembly: TagPrefix("WebPageControls", "Ipage")]
namespace ng.Common.WebControls
{
 [ToolboxData("<{0}:PagerBar runat=/"server/"></{0}:PagerBar>")]
 public class PagerBar : Control, INamingContainer
 {
  #region Data(数据)
  #region CurrentPage
  [Category("Data")]
  [Browsable(false)]
  public int CurrentPage
  {
   get
   {
    if(ViewState["CurrentPage"] == null)
    {
     int currentPage;

     if(int.TryParse(HttpContext.Current.Request.QueryString[this.PageParamName], out currentPage))
     {
      ViewState["CurrentPage"] = currentPage;
     }
     else
     {
      ViewState["CurrentPage"] = 1;
     }
    }

    return (int)ViewState["CurrentPage"];
   }

   set
   {
    ViewState["CurrentPage"] = value;
   }
  }
  #endregion

  #region PageSize
  [Category("Data")]
  [DefaultValue(10)]
  public int PageSize
  {
   get
   {
    int pageSize = (ViewState["PageSize"] == null) ? 10 : (int)ViewState["PageSize"];
    return (pageSize > 0) ? pageSize : 0;
   }

   set
   {
    ViewState["PageSize"] = value;
   }
  }
  #endregion

  #region RecordCount
  [Category("Data")]
  [Browsable(false)]
  public int RecordCount
  {
   get
   {
    return (ViewState["RecordCount"] == null) ? 0 : (int)ViewState["RecordCount"];
   }

   set
   {
    ViewState["RecordCount"] = value;
   }
  }
  #endregion

  #region PageCount
  [Browsable(false)]
  public int PageCount
  {
   get
   {
    return (int)Math.Ceiling((double)this.RecordCount / this.PageSize);
   }
  }
  #endregion
  #endregion

  #region Navigation(导航)
  #region PageParamName
  [Category("Navigation")]
  [DefaultValue("CurrentPage")]
  public string PageParamName
  {
   get
   {
    return (ViewState["PageParamName"] == null) ? "CurrentPage" : (string)ViewState["PageParamName"];
   }

   set
   {
    ViewState["PageParamName"] = value;
   }
  }
  #endregion

  #region FirstPageText
  [Category("Navigation")]
  [DefaultValue("首页")]
  public string FirstPageText
  {
   get
   {
    return (ViewState["FirstPageText"] == null) ? "首页" : (string)ViewState["FirstPageText"];
   }

   set
   {
    ViewState["FirstPageText"] = value;
   }
  }
  #endregion

  #region PrePageText
  [Category("Navigation")]
  [DefaultValue("上一页")]
  public string PrePageText
  {
   get
   {
    return (ViewState["PrePageText"] == null) ? "上一页" : (string)ViewState["PrePageText"];
   }

   set
   {
    ViewState["PrePageText"] = value;
   }
  }
  #endregion

  #region NextPageText
  [Category("Navigation")]
  [DefaultValue("下一页")]
  public string NextPageText
  {
   get
   {
    return (ViewState["NextPageText"] == null) ? "下一页" : (string)ViewState["NextPageText"];
   }

   set
   {
    ViewState["NextPageText"] = value;
   }
  }
  #endregion

  #region LastPageText
  [Category("Navigation")]
  [DefaultValue("末页")]
  public string LastPageText
  {
   get
   {
    return (ViewState["LastPageText"] == null) ? "末页" : (string)ViewState["LastPageText"];
   }

   set
   {
    ViewState["LastPageText"] = value;
   }
  }
  #endregion
  #endregion

  #region Layout(布局)
  #region Width
  [Category("Layout")]
  public Unit Width
  {
   get
   {
    return (ViewState["Width"] == null) ? Unit.Percentage(100) : (Unit)ViewState["Width"];
   }

   set
   {
    ViewState["Width"] = value;
   }
  }
  #endregion

  #region Height
  [Category("Layout")]
  public Unit Height
  {
   get
   {
    return (ViewState["Height"] == null) ? Unit.Pixel(20) : (Unit)ViewState["Height"];
   }

   set
   {
    ViewState["Height"] = value;
   }
  }
  #endregion

  #region CellPadding
  [Category("Layout")]
  [DefaultValue(0)]
  public int CellPadding
  {
   get
   {
    return (ViewState["CellPadding"] == null) ? 0 : (int)ViewState["CellPadding"];
   }

   set
   {
    ViewState["CellPadding"] = value;
   }
  }
  #endregion

  #region CellSpacing
  [Category("Layout")]
  [DefaultValue(0)]
  public int CellSpacing
  {
   get
   {
    return (ViewState["CellSpacing"] == null) ? 0 : (int)ViewState["CellSpacing"];
   }

   set
   {
    ViewState["CellSpacing"] = value;
   }
  }
  #endregion
  #endregion

  #region Appearance(外观)
  #region TableCssClass
  [Category("Appearance")]
  public string TableCssClass
  {
   get
   {
    return (ViewState["TableCssClass"] == null) ? string.Empty : (string)ViewState["TableCssClass"];
   }

   set
   {
    ViewState["TableCssClass"] = value;
   }
  }
  #endregion

  #region TableCellCssClass
  [Category("Appearance")]
  public string TableCellCssClass
  {
   get
   {
    return (ViewState["TableCellCssClass"] == null) ? string.Empty : (string)ViewState["TableCellCssClass"];
   }

   set
   {
    ViewState["TableCellCssClass"] = value;
   }
  }
  #endregion

  #region PagerCssClass
  [Category("Appearance")]
  public string PagerCssClass
  {
   get
   {
    return (ViewState["PagerCssClass"] == null) ? string.Empty : (string)ViewState["PagerCssClass"];
   }

   set
   {
    ViewState["PagerCssClass"] = value;
   }
  }
  #endregion
  #endregion

  #region GetPagerUrl
  private string GetPagerUrl()
  {
   StringBuilder sbUrl = new StringBuilder(HttpContext.Current.Request.Path);
   sbUrl.Append('?');
   NameValueCollection query = HttpContext.Current.Request.QueryString;

   for(int i = 0; i < query.Count; i++)
   {
    if(query.GetKey(i) != this.PageParamName)
    {
     sbUrl.Append(query.GetKey(i));
     sbUrl.Append('=');
     sbUrl.Append(HttpContext.Current.Server.UrlEncode(query.Get(i)));
     sbUrl.Append('&');
    }
   }

   sbUrl.Append(this.PageParamName);
   sbUrl.Append('=');
   return sbUrl.ToString();
  }
  #endregion

  #region GetPagerLinks
  private string[] GetPagerLinks()
  {
   string[] links = new string[5];
   int prePage = 1;
   int nextPage = 1;

   if(this.RecordCount > 0)
   {
    string pagerUrl = this.GetPagerUrl();
    prePage = (this.CurrentPage > 1) ? (this.CurrentPage - 1) : 1;
    nextPage = (this.CurrentPage + 1 > this.PageCount) ? this.PageCount : this.CurrentPage + 1;
    links[0] = (this.CurrentPage == 1) ? null : pagerUrl + "1";
    links[1] = (this.CurrentPage == prePage) ? null : pagerUrl + prePage.ToString();
    links[2] = (this.CurrentPage == nextPage) ? null : pagerUrl + nextPage.ToString();
    links[3] = (this.CurrentPage == this.PageCount) ? null : pagerUrl + PageCount.ToString();
    links[4] = pagerUrl;
    return links;
   }
   else
   {
    this.CurrentPage = 0;
   }

   return links;
  }
  #endregion

  #region GetHTML
  private void GetHTML(HtmlTextWriter writer)
  {
   string[] links = this.GetPagerLinks();

   writer.WriteBeginTag("table");
   writer.WriteAttribute("width", this.Width.ToString());
   writer.WriteAttribute("height", this.Height.ToString());
   writer.WriteAttribute("cellpadding", this.CellPadding.ToString());
   writer.WriteAttribute("cellspacing", this.CellSpacing.ToString());
   writer.WriteAttribute("class", this.TableCssClass);
   writer.Write(HtmlTextWriter.TagRightChar);
   writer.WriteFullBeginTag("tr");
   writer.WriteBeginTag("td");
   writer.WriteAttribute("align", "left");
   writer.WriteAttribute("width", "100");

   if(this.TableCellCssClass.Length != 0)
   {
    writer.WriteAttribute("class", this.TableCellCssClass);
   }

   writer.Write(HtmlTextWriter.TagRightChar);
   writer.WriteFullBeginTag("span");
   writer.Write("&nbsp;共&nbsp;{0}&nbsp;条数据", this.RecordCount);
   writer.WriteEndTag("span");
   writer.WriteEndTag("td");
   writer.WriteBeginTag("td");
   writer.WriteAttribute("align", "center");

   if(this.TableCellCssClass.Length != 0)
   {
    writer.WriteAttribute("align", this.TableCellCssClass);
   }

   writer.Write(HtmlTextWriter.TagRightChar);

   //首页连接
   writer.WriteBeginTag("a");
   writer.WriteAttribute("class", this.PagerCssClass);

   if(links[0] != null)
   {
    writer.WriteAttribute("href", links[0]);
   }

   writer.Write(HtmlTextWriter.TagRightChar);
   writer.Write(this.FirstPageText);
   writer.WriteEndTag("a");
   writer.Write("&nbsp;");

   //上一页连接
   writer.WriteBeginTag("a");
   writer.WriteAttribute("class", this.PagerCssClass);

   if(links[1] != null)
   {
    writer.WriteAttribute("href", links[1]);
   }

   writer.Write(HtmlTextWriter.TagRightChar);
   writer.Write(this.PrePageText);
   writer.WriteEndTag("a");
   writer.Write("&nbsp;");

   //下一页连接
   writer.WriteBeginTag("a");
   writer.WriteAttribute("class", this.PagerCssClass);

   if(links[2] != null)
   {
    writer.WriteAttribute("href", links[2]);
   }

   writer.Write(HtmlTextWriter.TagRightChar);
   writer.Write(this.NextPageText);
   writer.WriteEndTag("a");
   writer.Write("&nbsp;");

   //末页连接
   writer.WriteBeginTag("a");
   writer.WriteAttribute("class", this.PagerCssClass);

   if(links[3] != null)
   {
    writer.WriteAttribute("href", links[3]);
   }

   writer.Write(HtmlTextWriter.TagRightChar);
   writer.Write(this.LastPageText);
   writer.WriteEndTag("a");
   writer.Write("&nbsp;&nbsp;转到");
   writer.WriteBeginTag("select");
   writer.WriteAttribute("onchange", string.Format("window.location.href='{0}'+this.options[this.selectedIndex].value;", links[4]));
   writer.Write(HtmlTextWriter.TagRightChar);

   for(int i = 1; i <= this.PageCount; i++)
   {
    writer.WriteBeginTag("option");
    writer.WriteAttribute("value", i.ToString());

    if(i == this.CurrentPage)
    {
     writer.WriteAttribute("selected", "true");
    }

    writer.Write(HtmlTextWriter.TagRightChar);
    writer.Write(i);
    writer.WriteEndTag("option");
   }

   writer.WriteEndTag("select");
   writer.Write("页");
   writer.WriteEndTag("td");
   writer.WriteBeginTag("td");
   writer.WriteAttribute("align", "right");

   if(this.TableCellCssClass.Length != 0)
   {
    writer.WriteAttribute("class", this.TableCellCssClass);
   }

   writer.Write(HtmlTextWriter.TagRightChar);
   writer.Write("第&nbsp;{0}&nbsp;/&nbsp;{1}&nbsp;页&nbsp;", this.CurrentPage, this.PageCount);
   writer.WriteEndTag("td");
   writer.WriteEndTag("tr");
   writer.WriteEndTag("table");
  }
  #endregion

  #region override Render
  protected override void Render(HtmlTextWriter writer)
  {
   this.GetHTML(writer);
   base.Render(writer);
  }
  #endregion
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值