您的位置:首页 > 编程语言 > C#

C#自己写的一个自定义分页控件

2011-08-19 17:48 381 查看
C#自己写的一个自定义分页控件(源码下载,没有DEMO)

分页以前一直是用第三方分页控件AspNetPager.dll,使用起来也挺方便的,就是样式设置起来感觉不是很好,于是经理决定我们自己做一个分页控件,这个任务就交到我的手上。这个自定义分页控件是模仿58同城的分页及结合我们现在项目的需要写的。感觉比较实用,没什么亮点。

  其实分页控件也没啥,就是生成相关的HTML代码,你需要啥HTML代码,用你的代码生成就是了,不管是AspNetPager.dll还是58同城也都是生成分页相关的HTML代码,其实就是一堆a标签,点分页的时候,分页控件所在的页面会刷新。

using System.Text;
using System.Web;
using System.Web.UI;
using System.ComponentModel;
using System.Collections.Generic;
using System.Web.UI.WebControls;

//自定义分页控件
namespace ObjectCommon.Libary.Component
{
[ToolboxData("<{0}:PagingControl runat=\"server\"></{0}:PagingControl>"), DefaultProperty("")]
public class PagingControl : Literal
{
#region 分页属性
private int pageSize = 10;
public int PageSize
{
set {
if (value > 0)
{
pageSize = value;
}
}
get { return pageSize; }
}

private int pageIndex = 1;
public int PageIndex
{
set
{
if (value > 0)
{
pageIndex = value;
}
}
get { return pageIndex; }
}

public int RecordCount
{
set;
get;
}

private int PageCount = 0;

//分页参数
private string paraName = "page";
public string ParaName
{
set
{
if (value != null && value.Trim() != "")
{
paraName = value.Trim();
}
}
get {
return paraName;
}
}
#endregion

#region Css
//分页控件的样式
public string CssClass
{
set;
get;
}

//上一页样式
public string CssPrev
{
set;
get;
}

//下一页样式
public string CssNext
{
set;
get;
}

//当前页样式
public string CssCurrent
{
set;
get;
}

//首页样式
public string CssFirst
{
set;
get;
}

//尾页样式
public string CssLast
{
set;
get;
}

//其它页样式
public string CssOther
{
set;
get;
}
#endregion

#region Img
//首页图片
public string ImgFirst
{
set;
get;
}

//上一页页图片
public string ImgPrev
{
set;
get;
}

//下一页页图片
public string ImgNext
{
set;
get;
}

//尾页
public string ImgLast
{
set;
get;
}
#endregion

// A标签的HRef
private string ATargetHref
{
set;
get;
}

//获取paraname之外的请求参数
private void GetUrl()
{
HttpContext ctx = HttpContext.Current;
string hostName ="http://"+ ctx.Request.Url.Host + ":" + ctx.Request.Url.Port ;
string url = ctx.Request.Url.ToString().Substring(hostName.Length).Split('?')[0] + "?";
StringBuilder query = new StringBuilder(url);
foreach (string key in ctx.Request.QueryString)
{
if (key!=null && key.ToLower() != this.ParaName)
{
query.Append(string.Format("{0}={1}&", key, ctx.Request.QueryString[key]));
}
}
this.ATargetHref = query.ToString();
}

private string GetUrl(int pageIndex)
{
return string.Format("{0}{1}={2}", this.ATargetHref,this.paraName, pageIndex);
}

//初始化属性
private void Initializtion()
{
GetUrl();
this.PageCount = (this.RecordCount - 1) / this.PageSize + 1;
if (!string.IsNullOrEmpty(HttpContext.Current.Request[this.ParaName]))
{
this.PageIndex = int.Parse(HttpContext.Current.Request[this.ParaName]);
}
}

//生成控件
private void LoadControl(List<Tag> divPaging)
{
if (divPaging == null || divPaging.Count == 0)
{
this.Text = null;
return;
}
StringBuilder sb = new StringBuilder(256);
if (this.CssClass == null || this.CssClass.Trim() == "")
{
sb.Append("<div>");
}
else
{
sb.Append(string.Format("<div class='{0}'>", this.CssClass));
}
for (int i = 0; i < divPaging.Count;i++)
{
if (divPaging[i] == null)
{
sb.Append(GetCurrentPage());
}
else
{
sb.Append(divPaging[i].ToString());
}
}
sb.Append("</div>");
this.Text = sb.ToString();
}

private string GetCurrentPage()
{
if (this.CssCurrent == null || this.CssCurrent.Trim() == "")
{
return string.Format("<span>{0}</span>", this.PageIndex);
}
else {
return string.Format("<span class={0}>{1}</span>", this.CssCurrent, this.PageIndex);
}
}

/// <summary>
/// 加载控件
/// </summary>
public void LoadControl()
{
if (this.RecordCount<=this.PageSize)
{
this.Text = null;
}
else
{
Initializtion();
LoadControl(AddATarget());
}
}

#region 创建标签
private Tag CreateATarget(string img,string css,int pageIndex,string content)
{
Tag a = new Tag();
a.HRef = GetUrl(pageIndex);
if (img == null || img.Trim() == "")
{
a.InnerHtml = content;
}
else {
a.InnerHtml = string.Format("<img src={0}/>",img);
}

if (css != null && css.Trim() != "")
{
a.CssClass = css;
}
return a;
}

#endregion

// 向集合中添加标签
private List<Tag> AddATarget()
{
List<Tag> divPaging = new List<Tag>();

if (this.PageIndex > 1)
{
divPaging.Add(CreateATarget(this.ImgFirst, this.CssFirst, 1, "首页"));//添加首页
divPaging.Add(CreateATarget(this.ImgPrev, this.CssPrev, this.PageIndex - 1, "上一页"));//添加上一页
}

int end = this.PageIndex + 5;
if (end < 11)
{
end = 11;
}
if (end > this.PageCount)
{
end = this.PageCount;
}

int start = end - 10 > 0 ? end - 10 : 1;

for (int i = start; i <= end; i++)
{
if (i == this.PageIndex)
{
divPaging.Add(null);
}
else
{
divPaging.Add(CreateATarget(null, this.CssOther, i, i.ToString()));
}
}

if (this.PageIndex < this.PageCount)
{
divPaging.Add(CreateATarget(this.ImgNext, this.CssNext, this.PageIndex + 1, "下一页"));//添加下一页
divPaging.Add(CreateATarget(this.ImgLast, this.CssLast, this.PageCount, "尾页"));//添加尾页
}

return divPaging;
}

// 标签实体
private class Tag
{
//链接
public string HRef
{
set;
get;
}

//链接显示的内容
public string InnerHtml
{
set;
get;
}

//样式
public string CssClass
{
set;
get;
}

public override string ToString()
{
if (this.CssClass != null && this.CssClass.Trim() != "")
{
this.CssClass = string.Format(" class='{0}'", this.CssClass);
}
return string.Format("<a href='{0}'{1}>{2}</a>", this.HRef, this.CssClass, this.InnerHtml);
}
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: