/// <summary>
/// 分页通用类
/// </summary>
public class PageF
{
/// <summary>
/// 页总数
/// </summary>
public int PageCount
{
get
{
if (AllCount > RecordCount)
{
if (AllCount % RecordCount == 0)
return AllCount / RecordCount;
else
return AllCount / RecordCount + 1;
}
else if (AllCount == 0)
return 0;
return 1;
}
}
/// <summary>
/// 总记录数
/// </summary>
public int AllCount
{
get
{
string sql = "select count(*) from " + Tablename;
return Convert.ToInt32(DBHelp.GetScaleSql(sql));
}
} private int _recordCount;
/// <summary>
/// 每次取出记录数
/// </summary>
public int RecordCount
{
get { return _recordCount; }
set { _recordCount = value; }
} private int _curIndex;
/// <summary>
/// 当前页
/// </summary>
public int CurIndex
{
get { return _curIndex; }
set { _curIndex = value; }
} private int _pagesChange; public int PagesChange
{
get { return _pagesChange; }
set { _pagesChange = value; }
} /// <summary>
/// 页码
/// </summary>
/// <param name="count">页总数</param>
/// <returns></returns>
public string PageIndex(int count)
{
StringBuilder sbuider = new StringBuilder("<a class='" + CssClass + "' href='" + LinkUrl + 1 + "'>首页</a>");
sbuider.Append(" ");
if (count > PagesChange)
{
if (CurIndex < PagesChange)
{
for (int i = 1; i < PagesChange + 1; i++)
{
sbuider.AppendFormat("<a class='{0}' href='{1}'>" + i + "</a>", CssClass, LinkUrl + i);
}
sbuider.Append("...");
}
else
{
sbuider.Append(LinkContext(count));
}
}
else
{
for (int i = 1; i < count + 1; i++)
{
sbuider.AppendFormat("<a class='{0}' href='{1}'>" + i + "</a>", CssClass, LinkUrl + i);
sbuider.Append(" ");
}
}
sbuider.AppendFormat("<a class='{0}' href='{1}'>尾页</a>", CssClass, LinkUrl + count);
return sbuider.ToString();
} private static int recode = 0;
private static bool blag = true; private string LinkContext(int count)
{
if (CurIndex != count && CurIndex % PagesChange == 0) PageF.blag = true;
if (PageF.blag)
{
PageF.recode = CurIndex;
PageF.blag = false;
}
StringBuilder builder = new StringBuilder();
int currPagesChange = count - PageF.recode - PagesChange;
if (CurIndex < count)
{
int p = 0;
if (PagesChange + PageF.recode > count)
p = count;
else
p = PagesChange + PageF.recode;
for (int i = PageF.recode + 1; i < p + 1; i++)
{
builder.AppendFormat("<a class='{0}' href='{1}'>" + i + "</a>", CssClass, LinkUrl + i);
builder.Append(" ");
}
}
if (currPagesChange > 0) builder.Append("...");
return builder.ToString();
} private string _cssClass; public string CssClass
{
get { return _cssClass; }
set { _cssClass = value; }
} private string _LinkUrl; public string LinkUrl
{
get { return _LinkUrl; }
set { _LinkUrl = value; }
} private string _tablename;
/// <summary>
/// 从哪张表获取数据
/// </summary>
public string Tablename
{
get { return _tablename; }
set { _tablename = value; }
}
/// <summary>
/// 获取主键
/// </summary>
/// <returns></returns>
public string GetPri
{
get
{
string sql = "select c.name,t.name from sysindexes i"
+ " join sysindexkeys k on i.id = k.id and i.indid = k.indid"
+ " join sysobjects o on i.id = o.id"
+ " join syscolumns c on i.id=c.id and k.colid = c.colid"
+ " join sys.types AS t ON c.type=t.user_type_id"
+ " where o.xtype = 'U' and o.name='" + Tablename + "'"
+ " and exists(select 1 from sysobjects where xtype = 'PK' and name = i.name)";
SqlDataReader dr = DBHelp.CreateReader(sql);
Dictionary<string, object> dic = new Dictionary<string, object>();
while (dr.Read())
{
dic.Add(dr[0].ToString(), dr[1]);
}
string primary = "";
foreach (string item in dic.Keys)
{
if (dic[item].ToString() == "int")
{
primary = item;
break;
}
}
return primary;
}
}
public string Fsql()
{
string primary = GetPri;
string sql = "select top " + RecordCount + " * from " + Tablename + " where " + primary
+ " not in(select top " + (CurIndex - 1) * RecordCount + " " + primary + " from " + Tablename + " order by " + primary + ") order by " + primary;
return sql;
}
}
/// 分页通用类
/// </summary>
public class PageF
{
/// <summary>
/// 页总数
/// </summary>
public int PageCount
{
get
{
if (AllCount > RecordCount)
{
if (AllCount % RecordCount == 0)
return AllCount / RecordCount;
else
return AllCount / RecordCount + 1;
}
else if (AllCount == 0)
return 0;
return 1;
}
}
/// <summary>
/// 总记录数
/// </summary>
public int AllCount
{
get
{
string sql = "select count(*) from " + Tablename;
return Convert.ToInt32(DBHelp.GetScaleSql(sql));
}
} private int _recordCount;
/// <summary>
/// 每次取出记录数
/// </summary>
public int RecordCount
{
get { return _recordCount; }
set { _recordCount = value; }
} private int _curIndex;
/// <summary>
/// 当前页
/// </summary>
public int CurIndex
{
get { return _curIndex; }
set { _curIndex = value; }
} private int _pagesChange; public int PagesChange
{
get { return _pagesChange; }
set { _pagesChange = value; }
} /// <summary>
/// 页码
/// </summary>
/// <param name="count">页总数</param>
/// <returns></returns>
public string PageIndex(int count)
{
StringBuilder sbuider = new StringBuilder("<a class='" + CssClass + "' href='" + LinkUrl + 1 + "'>首页</a>");
sbuider.Append(" ");
if (count > PagesChange)
{
if (CurIndex < PagesChange)
{
for (int i = 1; i < PagesChange + 1; i++)
{
sbuider.AppendFormat("<a class='{0}' href='{1}'>" + i + "</a>", CssClass, LinkUrl + i);
}
sbuider.Append("...");
}
else
{
sbuider.Append(LinkContext(count));
}
}
else
{
for (int i = 1; i < count + 1; i++)
{
sbuider.AppendFormat("<a class='{0}' href='{1}'>" + i + "</a>", CssClass, LinkUrl + i);
sbuider.Append(" ");
}
}
sbuider.AppendFormat("<a class='{0}' href='{1}'>尾页</a>", CssClass, LinkUrl + count);
return sbuider.ToString();
} private static int recode = 0;
private static bool blag = true; private string LinkContext(int count)
{
if (CurIndex != count && CurIndex % PagesChange == 0) PageF.blag = true;
if (PageF.blag)
{
PageF.recode = CurIndex;
PageF.blag = false;
}
StringBuilder builder = new StringBuilder();
int currPagesChange = count - PageF.recode - PagesChange;
if (CurIndex < count)
{
int p = 0;
if (PagesChange + PageF.recode > count)
p = count;
else
p = PagesChange + PageF.recode;
for (int i = PageF.recode + 1; i < p + 1; i++)
{
builder.AppendFormat("<a class='{0}' href='{1}'>" + i + "</a>", CssClass, LinkUrl + i);
builder.Append(" ");
}
}
if (currPagesChange > 0) builder.Append("...");
return builder.ToString();
} private string _cssClass; public string CssClass
{
get { return _cssClass; }
set { _cssClass = value; }
} private string _LinkUrl; public string LinkUrl
{
get { return _LinkUrl; }
set { _LinkUrl = value; }
} private string _tablename;
/// <summary>
/// 从哪张表获取数据
/// </summary>
public string Tablename
{
get { return _tablename; }
set { _tablename = value; }
}
/// <summary>
/// 获取主键
/// </summary>
/// <returns></returns>
public string GetPri
{
get
{
string sql = "select c.name,t.name from sysindexes i"
+ " join sysindexkeys k on i.id = k.id and i.indid = k.indid"
+ " join sysobjects o on i.id = o.id"
+ " join syscolumns c on i.id=c.id and k.colid = c.colid"
+ " join sys.types AS t ON c.type=t.user_type_id"
+ " where o.xtype = 'U' and o.name='" + Tablename + "'"
+ " and exists(select 1 from sysobjects where xtype = 'PK' and name = i.name)";
SqlDataReader dr = DBHelp.CreateReader(sql);
Dictionary<string, object> dic = new Dictionary<string, object>();
while (dr.Read())
{
dic.Add(dr[0].ToString(), dr[1]);
}
string primary = "";
foreach (string item in dic.Keys)
{
if (dic[item].ToString() == "int")
{
primary = item;
break;
}
}
return primary;
}
}
public string Fsql()
{
string primary = GetPri;
string sql = "select top " + RecordCount + " * from " + Tablename + " where " + primary
+ " not in(select top " + (CurIndex - 1) * RecordCount + " " + primary + " from " + Tablename + " order by " + primary + ") order by " + primary;
return sql;
}
}
/// <summary>
/// 分页数据
/// </summary>
public class PageData
{
public PageData(int pageindex, int pagesize)
{
pageIndex = pageindex;
pageSize = pagesize;
}
private int pageIndex; /// <summary>
/// 当前页
/// </summary>
public int PageIndex
{
get { return pageIndex; }
set { pageIndex = value; }
}
private int recordsCount; /// <summary>
/// 总记录条数
/// </summary>
public int RecordsCount
{
get { return recordsCount; }
set { recordsCount = value; }
}
private int pageSize; /// <summary>
/// 一页的记录条数
/// </summary>
public int PageSize
{
get { return pageSize; }
set { pageSize = value; }
} /// <summary>
/// 总页数
/// </summary>
public int PageCount
{
get
{
if (recordsCount != 0)
{
return this.RecordsCount % this.PageSize == 0 ? this.RecordsCount / this.PageSize : this.RecordsCount / this.PageSize + 1;
}
else
{
return 0;
}
}
}
}
public delegate DataTable ExecutPage(PageData pagedata, string strWhere, out int records);
public class PagerClass
{
public PagerClass(ExecutPage executpagehandl, PageData ppagedata)
{
ExecutPageHandl = executpagehandl;
pagedata = ppagedata;
}
public ExecutPage ExecutPageHandl; private PageData pagedata; /// <summary>
/// 获得分页导航 , 非AJAX提交分页
/// </summary>
/// <param name="pagedata">分页数据</param>
/// <param name="urlPath">提交地址</param>
/// <param name="linkcount">生成链接个数</param>
/// <returns>HTML导航</returns>
public string GetPageNavigat(string urlPath, int linkcount, string strWhere, out DataTable dsData, out int records)
{
StringBuilder output = new StringBuilder();
dsData = null;
records = 0;
if (pagedata != null)
{
dsData = ExecutPageHandl(pagedata, strWhere, out records);
pagedata.RecordsCount = records;
if (pagedata.PageCount > 0)
{
output.Append("<div class=\"pager\">");
output.Append("<a href=\"" + urlPath + "&page=1\">首页</a>\r\n"); if (pagedata.PageIndex > 1)
{
output.Append("<a href=\"" + urlPath + "&page=" + Convert.ToString(pagedata.PageIndex - 1) + "\">上一页</a>\r\n");
} for (int i = 0; i <= linkcount * 2; i++)
{
//一共最多显示linkcount * 2个页码,前面linkcount ,后面linkcount 个
if ((pagedata.PageIndex + i - linkcount) >= 1 && (pagedata.PageIndex + i - linkcount) <= pagedata.PageCount)
{
if (linkcount == i)
{
//当前页处理
output.Append(string.Format("<span class=\"current\">{0}</span>\r\n", pagedata.PageIndex));
}
else
{
//一般页处理
output.Append("<a href=\"" + urlPath + "&page=" + Convert.ToString(pagedata.PageIndex + i - linkcount) + "\">" + Convert.ToString(pagedata.PageIndex + i - linkcount) + "</a>\r\n");
}
}
output.Append(" ");
}
if (pagedata.PageIndex < pagedata.PageCount)
{
//处理下一页的链接
output.Append("<a href=\"" + urlPath + "&page=" + Convert.ToString(pagedata.PageIndex + 1) + "\">下一页</a>\r\n");
}
output.Append(" ");
if (pagedata.PageIndex != pagedata.PageCount)
{
output.Append("<a href=\"" + urlPath + "&page=" + pagedata.PageCount.ToString() + "\">尾页</a>\r\n");
}
output.Append(" ");
output.AppendFormat("{0}", "<span class=\"total\">第" + pagedata.PageIndex + "/" + pagedata.PageCount + "页</span></div>");
}
}
return output.ToString();
}
}
主要想法是自写查询数据的逻辑,定义一个委托,查询函数遵循这个委托就行了调用方法:/// <summary>
/// 绑定相册信息
/// </summary>
/// <param name="aid"></param>
protected void BindPhotos(string aid, int pageindex, int pagesize)
{
int pageTotal = 0;
PageData pd = new PageData(pageindex, pagesize);
ExecutPage Ep = GetPagePhoto;
PagerClass pageclass = new PagerClass(Ep, pd);
DataTable dsphoto = null;
PageNav = pageclass.GetPageNavigat("index.aspx?b=1&uid=" + CurrentUserID.ToString() + "&aid=" + aid, 5, "[AlbumID]=" + aid + " and [UserID]=" + CurrentUserID.ToString() + " and IsLock=0", out dsphoto, out pageTotal);
repPhotos.DataSource = dsphoto.DefaultView;
repPhotos.DataBind();
} public DataTable GetPagePhoto(PageData pagedata, string strWhere, out int records)
{
records = 0;
SolaSNS.BLL.sns_photo bllsns_photo = new SolaSNS.BLL.sns_photo();
DataTable dsphoto = bllsns_photo.GetList("sns_photo", "PhotoID", pagedata.PageSize, pagedata.PageIndex, strWhere, ref records).Tables[0];
return dsphoto;
}上面的GetPagePhoto方法就是遵循委托的自写查询逻辑额,,不知道会不会被BS有什么不好的地方请提出来.. 上面的委托参数strWhere可以改成一个你想要的参数...