public static string OutPageList(int pageSize, int pageIndex, int totalCount, string linkUrl, int centSize)
{
//计算页数
if (totalCount < 1 || pageSize < 1)
{
return "";
}
int pageCount = totalCount / pageSize;
if (pageCount < 1)
{
return "";
}
if (totalCount % pageSize > 0)
{
pageCount += 1;
}
if (pageCount <= 1)
{
return "";
}
StringBuilder pageStr = new StringBuilder();
string pageId = "__id__";
string firstBtn = "<a href=\"" + ReplaceStr(linkUrl, pageId, (pageIndex-1).ToString()) + "\">上一页?</a>";
string lastBtn = "<a href=\"" + ReplaceStr(linkUrl, pageId, (pageIndex + 1).ToString()) + "\">下一页?</a>";
string firstStr = "<a href=\"" + ReplaceStr(linkUrl, pageId, "1") + "\">1</a>";
string lastStr = "<a href=\"" + ReplaceStr(linkUrl, pageId, pageCount.ToString()) + "\">" + pageCount.ToString() + "</a>";
if (pageIndex <= 1)
{
firstBtn = "<span class=\"disabled\">?上一页</span>";
}
if (pageIndex >= pageCount)
{
lastBtn = "<span class=\"disabled\">下一页?</span>";
}
if (pageIndex == 1)
{
firstStr = "<span class=\"current\">1</span>";
}
if (pageIndex == pageCount)
{
lastStr = "<span class=\"current\">" + pageCount.ToString() + "</span>";
}
int firstNum = pageIndex - (centSize / 2); //中间开始的页码
if (pageIndex < centSize)
firstNum = 2;
int lastNum = pageIndex + centSize - ((centSize / 2) + 1); //中间结束的页码
if (lastNum >= pageCount)
lastNum = pageCount - 1;
pageStr.Append("<span>共" + totalCount + "记录</span>");
pageStr.Append(firstBtn + firstStr);
if (pageIndex >= centSize)
{
pageStr.Append("<span>...</span>\n");
}
for (int i = firstNum; i <= lastNum; i++)
{
if (i == pageIndex)
{
pageStr.Append("<span class=\"current\">" + i + "</span>");
}
else
{
pageStr.Append("<a href=\"" + ReplaceStr(linkUrl, pageId, i.ToString()) + "\">" + i + "</a>");
}
}
if (pageCount - pageIndex > centSize - ((centSize / 2)))
{
pageStr.Append("<span>...</span>");
}
pageStr.Append(lastStr + lastBtn);
return pageStr.ToString();
}
public static string ReplaceStr(string originalStr, string oldStr, string newStr)
{
if (string.IsNullOrEmpty(oldStr))
{
return "";
}
return originalStr.Replace(oldStr, newStr);
}
public static string GetCookie(string strName, string key)
{
if (HttpContext.Current.Request.Cookies != null && HttpContext.Current.Request.Cookies[strName] != null && HttpContext.Current.Request.Cookies[strName][key] != null)
return UrlDecode(HttpContext.Current.Request.Cookies[strName][key].ToString());
return "";
}
public static string UrlDecode(string str)
{
if (string.IsNullOrEmpty(str))
{
return "";
}
return HttpContext.Current.Server.UrlDecode(str);
}
public static void WriteCookie(string strName, string key, string strValue, int expires)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies[strName];
if (cookie == null)
{
cookie = new HttpCookie(strName);
}
cookie[key] = UrlEncode(strValue);
cookie.Expires = DateTime.Now.AddMinutes(expires);
HttpContext.Current.Response.AppendCookie(cookie);
}
}
Bussiness
命名空间
public class Business
{
private readonly DAL.xxx xxxDal;
public Business()
{
xxxDal = new DAL.xxx();
}
public List<Model.xxx> GetList(int pageSize, int pageIndex, string strWhere, string filedOrder, out int recordCount,out decimal totalIncome)
{
return xxxDal.GetList(pageSize, pageIndex, strWhere, filedOrder, out recordCount,out totalIncome);
}
}
DAL
命名空间
public partial class xxx
{
public List<Model.xxx> GetList(int pageSize, int pageIndex, string strWhere, string filedOrder, out int recordCount,out decimal totalIncome)
{
totalIncome = 0;
StringBuilder strSql = new StringBuilder();
strSql.Append(@"select a.oid,ocreatetime,a.oaccname,a.oacctel,(select ucardnum from AppUser where uid=a.ouid) as ucardnum,c.pname,
otype,ISNULL(b.corealmoney,0) as corealmoney,ISNULL(b.cooid,0) as cooid,
omoney,ISNULL(coprate,0) coprate,ISNULL(codrawfee,0) codrawfee,ISNULL(codowndrawfee,0) codowndrawfee,ISNULL(d.uname,'无') as uname,
ISNULL(b.couserrate,0) as couserrate,
ROW_NUMBER() over(order by ocreatetime desc) r from xxx a left join
(select cooid,coprate,comoney,corealmoney,codowndrawfee,codrawfee,couupperid,couserrate from xxx where costatus=1)b
on a.oid=b.cooid join xxx c on a.opid=c.pid
left join xxx d on b.couupperid=d.[uid] where a.ostatus=1 ");
if (strWhere.Trim() != "")
{
strSql.Append(strWhere);
}
using (var context = DataBaseConnection.GetSdkBaseConnection())
{
recordCount = context.ExecuteScalar<int>(PagingHelper.CreateCountingSql(strSql.ToString()));
if (recordCount > 0)
{
StringBuilder strSql2 = new StringBuilder();
strSql2.Append(@"select SUM(corealmoney) from xxx a left join
(select cooid,coprate,corealmoney,codowndrawfee,comoney,codrawfee,couupperid,couserrate from xxx where costatus=1)b
on a.oid=b.cooid join xxx c on a.opid=c.pid
left join xxx d on b.couupperid=d.[uid] where a.ostatus=1 ");
if (strWhere.Trim() != "")
{
strSql2.Append(strWhere);
}
}
return context.Query<Model.xxx>(PagingHelper.CreatePagingSql(recordCount, pageSize, pageIndex, strSql.ToString(), filedOrder)).ToList();
}
}
}
PagingHelper
命名空间
// ROW_NUMBER高效率分页(仅支持MSSQL2005及以上)
public static class PagingHelper
{
// 获取分页SQL语句,默认row_number为关健字,所有表不允许使用该字段名
public static string CreatePagingSql(int _recordCount, int _pageSize, int _pageIndex, string _safeSql, string _orderField)
{
//计算总页数
_pageSize = _pageSize == 0 ? _recordCount : _pageSize;
int pageCount = (_recordCount + _pageSize - 1) / _pageSize;
//检查当前页数
if (_pageIndex < 1)
{
_pageIndex = 1;
}
else if (_pageIndex > pageCount)
{
_pageIndex = pageCount;
}
//拼接SQL字符串,加上ROW_NUMBER函数进行分页
StringBuilder newSafeSql = new StringBuilder();
newSafeSql.AppendFormat("SELECT ROW_NUMBER() OVER(ORDER BY {0}) as row_number,", _orderField);
newSafeSql.Append(_safeSql.Substring(_safeSql.ToUpper().IndexOf("SELECT") + 6));
//拼接成最终的SQL语句
StringBuilder sbSql = new StringBuilder();
sbSql.Append("SELECT * FROM (");
sbSql.Append(newSafeSql.ToString());
sbSql.Append(") AS T");
sbSql.AppendFormat(" WHERE row_number between {0} and {1}", ((_pageIndex - 1) * _pageSize) + 1, _pageIndex * _pageSize);
return sbSql.ToString();
}
// 获取记录总数SQL语句
public static string CreateCountingSql(string _safeSql)
{
return string.Format(" SELECT COUNT(1) AS RecordCount FROM ({0}) AS T ", _safeSql);
}
}
以上就是.NET中怎么实现程序分页的详细内容!
相关阅读 >>
在.net core类库中使用ef core迁移数据库到sql server的方法_实用技巧
.net中core使用socket与树莓派进行通信的实例分析(图文)
更多相关阅读请进入《MSSQL2005》频道 >>
C#高级编程(第11版) C# 7 & .NET Core 2.0(.NET开发经典名著)
作者:[美]克里斯琴·内格尔(Christian Nagel)著。出版时间:2019年3月。