调用时自定义显示样式如:
PageString = "第[PageIndex]页/共[TotalPage]页 第每[PageSize]条/共[TotalRecord]条 [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr] [TurnControl]";
简而说之,这里只做分页的字符串拼接,将用户自定义的替换,至于数据的处理,完全不涉及.
using System;
using System.Collections.Generic;
using System.Text;
/**//// <summary>
/// .Net通用分页类(存储过程分页版,完全自定义显示样式,包括中英显示)
/// 作者:启程 www.letwego.cn
/// 可用于任意用途,请保留作者信息,谢谢!
/// </summary>
namespace Ask.Common
{
/**//// <summary>
/// 分页(只处理分页,与数据无关)
/// </summary>
public class PageStyle
{
初始构造#region 初始构造
public PageStyle(string Language)
{
if (Language == "EN")//英文默认
{
PageString = "Page [PageIndex]/[TotalPage] Info [PageSize]/[TotalRecord] [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr] [TurnControl]";
TurnUrlStr = "";
PageSize = 20;
PageIndex = 1;
TotalRecord = 0;
FirstStr = "<<";
PrevStr = "<";
NextStr = ">";
LastStr = ">>";
NoRecord = "Total 0";
ButtonStr = " GO ";
TotalPage = 0;
TurnControl = "";
PageNumber = "";
ShowPageStr = "";
}
else//中文默认
{
PageString = "第[PageIndex]页/共[TotalPage]页 第每[PageSize]条/共[TotalRecord]条 [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr] [TurnControl]";
TurnUrlStr = "";
PageSize = 20;
PageIndex = 1;
TotalRecord = 0;
FirstStr = "首页";
PrevStr = "上一页";
NextStr = "下一页";
LastStr = "尾页";
NoRecord = "共有 0 条信息";
ButtonStr = "跳转";
TotalPage = 0;
TurnControl = "";
PageNumber = "";
ShowPageStr = "";
}
}
#endregion
字段 公共#region 字段 公共
/**//// <summary>
/// 具体样式(需要显示哪些内容)
/// </summary>
public string PageString;
/**//// <summary>
/// 跳转 的url链接
/// </summary>
public string TurnUrlStr;
/**//// <summary>
/// 跳转的url链接的参数前面不要加问号和与号
/// </summary>
public string Parameters;
/**//// <summary>
/// 每页记录数
/// </summary>
public int PageSize;
/**//// <summary>
/// 需要获取第几页的数据,从 1 开始
/// </summary>
public int PageIndex;
/**//// <summary>
/// 总记录数
/// </summary>
public int TotalRecord;
/**//// <summary>
/// 首页 显示样式
/// </summary>
public string FirstStr;
/**//// <summary>
/// 上一页 显示样式
/// </summary>
public string PrevStr;
/**//// <summary>
/// 下一页 显示样式
/// </summary>
public string NextStr;
/**//// <summary>
/// 尾页 显示样式
/// </summary>
public string LastStr;
/**//// <summary>
/// 没有记录时显示的信息
/// </summary>
public string NoRecord;
/**//// <summary>
/// 跳转按钮文字
/// </summary>
public string ButtonStr;
#endregion
字段 私有#region 字段 私有
/**//// <summary>
/// 总页数
/// </summary>
private int TotalPage;
/**//// <summary>
/// 跳转控件
/// </summary>
private string TurnControl;
/**//// <summary>
/// 存储中间的内容(如 1 2 3 页码)
/// </summary>
private string PageNumber;
/**//// <summary>
/// 显示页码的总字符
/// </summary>
private string ShowPageStr;
#endregion
获取最终页码显示#region 获取最终页码显示
/**//// <summary>
/// 获取最终页码显示
/// </summary>
/// <param name="Style">样式(1 是上下页,2 是显示一批页码)</param>
/// <param name="PlaceIn">固定当前页在第几个位置(样式2用)</param>
/// <param name="ShowNum">一页显示几个页码(样式2用)</param>
/// <returns>最终页码显示</returns>
public string GetShowPageStr(string Style, int PlaceIn, int ShowNum)
{
TotalPage = (TotalRecord + PageSize - 1) / PageSize;
//超出最小页码
if (PageIndex < 1)
{
PageIndex = 1;
}
//超出最大页码
if (PageIndex > TotalPage)
{
PageIndex = TotalPage;
}
//跳转
TurnControl = "<input value='" + PageIndex.ToString() + "' id='txtPageGo' name='txtPageGo' type='text' style='width:35px;' onkeydown=\"if(event.keyCode==13)window.location.href='" + TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Parameters + "'\"><input name='btnGo' type='button' id='btnGo' value='" + ButtonStr + "' onclick=\"javascript:window.location.href='" + TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Parameters + "'\">";
//没有记录
if (TotalRecord <= 0)
{
ShowPageStr = NoRecord;
}
//有记录
else
{
//只有一页
if (TotalPage <= 1)
{
ShowPageStr = "共有 " + TotalRecord.ToString() + " 条信息";
}
//不止一页
else
{
//第一页
if (PageIndex == 1)
{
}
else
{
FirstStr = "<a href=\"" + TurnUrlStr + "?Page=1" + "&" + Parameters + "\">" + FirstStr + "</a>";
PrevStr = "<a href=\"" + TurnUrlStr + "?Page=" + Convert.ToString(PageIndex - 1) + "&" + Parameters + "\">" + PrevStr + "</a>";
}
//最后一页
if (PageIndex == TotalPage)
{
}
else
{
NextStr = "<a href=\"" + TurnUrlStr + "?Page=" + Convert.ToString(PageIndex + 1) + "&" + Parameters + "\">" + NextStr + "</a>";
LastStr = "<a href=\"" + TurnUrlStr + "?Page=" + TotalPage + "&" + Parameters + "\">" + LastStr + "</a>";
}
}
样式一: 共X条信息 第N页/共M页 首页 上一页 下一页 尾页 跳转#region 样式一: 共X条信息 第N页/共M页 首页 上一页 下一页 尾页 跳转
if (Style == "1")
{
PageNumber = "";
}
#endregion
样式三: 共X条信息 第N页/共M页 首页 1 2 3 尾页 跳转 当前页码定位在第 PlaceIn 位#region 样式三: 共X条信息 第N页/共M页 首页 1 2 3 尾页 跳转 当前页码定位在第 PlaceIn 位
if (Style == "2")
{
int PageTemp = 0;
if (PlaceIn < 1 || PlaceIn > ShowNum)
{
PlaceIn = 2;//前面保持有两个,则当前页码定位在第3位
}
else
{
PlaceIn = PlaceIn - 1;//前面保持有 PlaceIn - 1 个
}
string strPageNum = "";
string strTempNow = "";
//当页码总数 <= 一页要显示的页码数
if (TotalPage <= ShowNum)
{
for (int i = 1; i <= TotalPage; i++)
{
strTempNow = Convert.ToString(PageTemp + i);
//当前页不显示超链接
if (PageIndex == PageTemp + i)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
else
{
//当前页码 <= 固定位置 PlaceIn
if (PageIndex <= PlaceIn)
{
for (int i = 1; i <= ShowNum; i++)
{
strTempNow = Convert.ToString(i);
//当前页不显示超链接
if (PageIndex == i)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
//当前页码 >=最后一批该显示
else if (PageIndex >= TotalPage - ShowNum + PlaceIn + 1)
{
//第一个显示的数字
PageTemp = TotalPage - ShowNum + 1;
for (int i = PageTemp; i <= TotalPage; i++)
{
if (i > TotalPage) break;
strTempNow = Convert.ToString(i);
//当前页不显示超链接
if (PageIndex == i)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
else
{
for (int i = PageIndex - PlaceIn; i < PageIndex - PlaceIn + ShowNum; i++)
{
strTempNow = Convert.ToString(i);
//当前页不显示超链接
if (i == PageIndex)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
}
PageNumber = strPageNum;
}
#endregion
}
ShowPageStr = PageString;
ShowPageStr = ShowPageStr.Replace("[PageIndex]", PageIndex.ToString());//
ShowPageStr = ShowPageStr.Replace("[TotalPage]", TotalPage.ToString());//
ShowPageStr = ShowPageStr.Replace("[PageSize]", PageSize.ToString());//
ShowPageStr = ShowPageStr.Replace("[TotalRecord]", TotalRecord.ToString());//
ShowPageStr = ShowPageStr.Replace("[FirstStr]", FirstStr);//
ShowPageStr = ShowPageStr.Replace("[PrevStr]", PrevStr);//
ShowPageStr = ShowPageStr.Replace("[NextStr]", NextStr);//
ShowPageStr = ShowPageStr.Replace("[LastStr]", LastStr);//
ShowPageStr = ShowPageStr.Replace("[TurnControl]", TurnControl);//
ShowPageStr = ShowPageStr.Replace("[PageNumber]", PageNumber);//
return ShowPageStr;
}
#endregion
}
调用实例#region 调用实例
/**//*
protected void BindData()
{
PageStyle MyPage = new PageStyle("EN");//创建类
MyPage.PageSize = MyPageSize;//页码大小
MyPage.TotalRecord = Counts;//总记录数
MyPage.TurnUrlStr = "AskSearchList.aspx";//要跳转的页面(当前页)
MyPage.Parameters = MyParameters;//页面所带参数
MyPage.PageIndex = PageIndex;//当前要显示的页码
//具体样式
MyPage.PageString = "第[PageIndex]页/共[TotalPage]页 第每[PageSize]条/共[TotalRecord]条 [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr] [TurnControl]";
string strPage = MyPage.GetShowPageStr("2", 3, 10);
labShowPage.Text = strPage;
}
*/
#endregion
简要说明#region 简要说明
/**//*
.Net通用分页类(存储过程分页版,可以完全自定义显示样式,包括中英显示).
大概思路是:主要是利用存储过程在数据库进行分页,
所以在这个类里面不涉及到数据的处理,只进行页码的显示格式处理,
配合SQL2005 的 ROW_NUMBER () 功能,能够达到更好的效果.
显示样式可以完全自定义,,用图片也可以,只是要把字符串拼成图片的Html
效果图:http://www.cnblogs.com/images/cnblogs_com/84ww/128905/r_PageStore.gif
*/
#endregion
附 存储过程例子#region 附 存储过程例子
/**//*
CREATE PROCEDURE dbo.sp_userinfoList
@strOptions varchar(200) = NULL,
@PageSize int = 20,
@PageIndex int = 1,
@Counts int = 0 OUTPUT
AS
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
DECLARE @PageUp int
DECLARE @PageDown int
--处理页大小
IF @PageSize = -1 SET @PageSize = 20
--获得总记录数
SELECT @Counts = COUNT(1) FROM userinfo
--当前页的第一条记录RowID
SET @PageDown = @PageSize * @PageIndex + 1
--当前页的最后一条记录RowID
SET @PageUp = @PageSize * (@PageIndex + 1)
-- 信息列表
IF @strOptions='LIST' BEGIN
SELECT
id,
user,
password,
datetime,
content
FROM
(
SELECT * ,
PageTableRowID = ROW_NUMBER () OVER (ORDER BY id DESC)
FROM userinfo
) AS PageTableList
WHERE PageTableRowID BETWEEN @PageDown AND @PageUp
END
*/
#endregion
}
using System.Collections.Generic;
using System.Text;
/**//// <summary>
/// .Net通用分页类(存储过程分页版,完全自定义显示样式,包括中英显示)
/// 作者:启程 www.letwego.cn
/// 可用于任意用途,请保留作者信息,谢谢!
/// </summary>
namespace Ask.Common
{
/**//// <summary>
/// 分页(只处理分页,与数据无关)
/// </summary>
public class PageStyle
{
初始构造#region 初始构造
public PageStyle(string Language)
{
if (Language == "EN")//英文默认
{
PageString = "Page [PageIndex]/[TotalPage] Info [PageSize]/[TotalRecord] [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr] [TurnControl]";
TurnUrlStr = "";
PageSize = 20;
PageIndex = 1;
TotalRecord = 0;
FirstStr = "<<";
PrevStr = "<";
NextStr = ">";
LastStr = ">>";
NoRecord = "Total 0";
ButtonStr = " GO ";
TotalPage = 0;
TurnControl = "";
PageNumber = "";
ShowPageStr = "";
}
else//中文默认
{
PageString = "第[PageIndex]页/共[TotalPage]页 第每[PageSize]条/共[TotalRecord]条 [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr] [TurnControl]";
TurnUrlStr = "";
PageSize = 20;
PageIndex = 1;
TotalRecord = 0;
FirstStr = "首页";
PrevStr = "上一页";
NextStr = "下一页";
LastStr = "尾页";
NoRecord = "共有 0 条信息";
ButtonStr = "跳转";
TotalPage = 0;
TurnControl = "";
PageNumber = "";
ShowPageStr = "";
}
}
#endregion
字段 公共#region 字段 公共
/**//// <summary>
/// 具体样式(需要显示哪些内容)
/// </summary>
public string PageString;
/**//// <summary>
/// 跳转 的url链接
/// </summary>
public string TurnUrlStr;
/**//// <summary>
/// 跳转的url链接的参数前面不要加问号和与号
/// </summary>
public string Parameters;
/**//// <summary>
/// 每页记录数
/// </summary>
public int PageSize;
/**//// <summary>
/// 需要获取第几页的数据,从 1 开始
/// </summary>
public int PageIndex;
/**//// <summary>
/// 总记录数
/// </summary>
public int TotalRecord;
/**//// <summary>
/// 首页 显示样式
/// </summary>
public string FirstStr;
/**//// <summary>
/// 上一页 显示样式
/// </summary>
public string PrevStr;
/**//// <summary>
/// 下一页 显示样式
/// </summary>
public string NextStr;
/**//// <summary>
/// 尾页 显示样式
/// </summary>
public string LastStr;
/**//// <summary>
/// 没有记录时显示的信息
/// </summary>
public string NoRecord;
/**//// <summary>
/// 跳转按钮文字
/// </summary>
public string ButtonStr;
#endregion
字段 私有#region 字段 私有
/**//// <summary>
/// 总页数
/// </summary>
private int TotalPage;
/**//// <summary>
/// 跳转控件
/// </summary>
private string TurnControl;
/**//// <summary>
/// 存储中间的内容(如 1 2 3 页码)
/// </summary>
private string PageNumber;
/**//// <summary>
/// 显示页码的总字符
/// </summary>
private string ShowPageStr;
#endregion
获取最终页码显示#region 获取最终页码显示
/**//// <summary>
/// 获取最终页码显示
/// </summary>
/// <param name="Style">样式(1 是上下页,2 是显示一批页码)</param>
/// <param name="PlaceIn">固定当前页在第几个位置(样式2用)</param>
/// <param name="ShowNum">一页显示几个页码(样式2用)</param>
/// <returns>最终页码显示</returns>
public string GetShowPageStr(string Style, int PlaceIn, int ShowNum)
{
TotalPage = (TotalRecord + PageSize - 1) / PageSize;
//超出最小页码
if (PageIndex < 1)
{
PageIndex = 1;
}
//超出最大页码
if (PageIndex > TotalPage)
{
PageIndex = TotalPage;
}
//跳转
TurnControl = "<input value='" + PageIndex.ToString() + "' id='txtPageGo' name='txtPageGo' type='text' style='width:35px;' onkeydown=\"if(event.keyCode==13)window.location.href='" + TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Parameters + "'\"><input name='btnGo' type='button' id='btnGo' value='" + ButtonStr + "' onclick=\"javascript:window.location.href='" + TurnUrlStr + "?Page=' + document.getElementById('txtPageGo').value + '" + "&" + Parameters + "'\">";
//没有记录
if (TotalRecord <= 0)
{
ShowPageStr = NoRecord;
}
//有记录
else
{
//只有一页
if (TotalPage <= 1)
{
ShowPageStr = "共有 " + TotalRecord.ToString() + " 条信息";
}
//不止一页
else
{
//第一页
if (PageIndex == 1)
{
}
else
{
FirstStr = "<a href=\"" + TurnUrlStr + "?Page=1" + "&" + Parameters + "\">" + FirstStr + "</a>";
PrevStr = "<a href=\"" + TurnUrlStr + "?Page=" + Convert.ToString(PageIndex - 1) + "&" + Parameters + "\">" + PrevStr + "</a>";
}
//最后一页
if (PageIndex == TotalPage)
{
}
else
{
NextStr = "<a href=\"" + TurnUrlStr + "?Page=" + Convert.ToString(PageIndex + 1) + "&" + Parameters + "\">" + NextStr + "</a>";
LastStr = "<a href=\"" + TurnUrlStr + "?Page=" + TotalPage + "&" + Parameters + "\">" + LastStr + "</a>";
}
}
样式一: 共X条信息 第N页/共M页 首页 上一页 下一页 尾页 跳转#region 样式一: 共X条信息 第N页/共M页 首页 上一页 下一页 尾页 跳转
if (Style == "1")
{
PageNumber = "";
}
#endregion
样式三: 共X条信息 第N页/共M页 首页 1 2 3 尾页 跳转 当前页码定位在第 PlaceIn 位#region 样式三: 共X条信息 第N页/共M页 首页 1 2 3 尾页 跳转 当前页码定位在第 PlaceIn 位
if (Style == "2")
{
int PageTemp = 0;
if (PlaceIn < 1 || PlaceIn > ShowNum)
{
PlaceIn = 2;//前面保持有两个,则当前页码定位在第3位
}
else
{
PlaceIn = PlaceIn - 1;//前面保持有 PlaceIn - 1 个
}
string strPageNum = "";
string strTempNow = "";
//当页码总数 <= 一页要显示的页码数
if (TotalPage <= ShowNum)
{
for (int i = 1; i <= TotalPage; i++)
{
strTempNow = Convert.ToString(PageTemp + i);
//当前页不显示超链接
if (PageIndex == PageTemp + i)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
else
{
//当前页码 <= 固定位置 PlaceIn
if (PageIndex <= PlaceIn)
{
for (int i = 1; i <= ShowNum; i++)
{
strTempNow = Convert.ToString(i);
//当前页不显示超链接
if (PageIndex == i)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
//当前页码 >=最后一批该显示
else if (PageIndex >= TotalPage - ShowNum + PlaceIn + 1)
{
//第一个显示的数字
PageTemp = TotalPage - ShowNum + 1;
for (int i = PageTemp; i <= TotalPage; i++)
{
if (i > TotalPage) break;
strTempNow = Convert.ToString(i);
//当前页不显示超链接
if (PageIndex == i)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
else
{
for (int i = PageIndex - PlaceIn; i < PageIndex - PlaceIn + ShowNum; i++)
{
strTempNow = Convert.ToString(i);
//当前页不显示超链接
if (i == PageIndex)
{
strPageNum = strPageNum + "<b>" + strTempNow + "</b> ";
}
else
{
strPageNum = strPageNum + "<a href=\"" + TurnUrlStr + "?Page=" + strTempNow + "&" + Parameters + "\">[" + strTempNow + "]</a> ";
}
}
}
}
PageNumber = strPageNum;
}
#endregion
}
ShowPageStr = PageString;
ShowPageStr = ShowPageStr.Replace("[PageIndex]", PageIndex.ToString());//
ShowPageStr = ShowPageStr.Replace("[TotalPage]", TotalPage.ToString());//
ShowPageStr = ShowPageStr.Replace("[PageSize]", PageSize.ToString());//
ShowPageStr = ShowPageStr.Replace("[TotalRecord]", TotalRecord.ToString());//
ShowPageStr = ShowPageStr.Replace("[FirstStr]", FirstStr);//
ShowPageStr = ShowPageStr.Replace("[PrevStr]", PrevStr);//
ShowPageStr = ShowPageStr.Replace("[NextStr]", NextStr);//
ShowPageStr = ShowPageStr.Replace("[LastStr]", LastStr);//
ShowPageStr = ShowPageStr.Replace("[TurnControl]", TurnControl);//
ShowPageStr = ShowPageStr.Replace("[PageNumber]", PageNumber);//
return ShowPageStr;
}
#endregion
}
调用实例#region 调用实例
/**//*
protected void BindData()
{
PageStyle MyPage = new PageStyle("EN");//创建类
MyPage.PageSize = MyPageSize;//页码大小
MyPage.TotalRecord = Counts;//总记录数
MyPage.TurnUrlStr = "AskSearchList.aspx";//要跳转的页面(当前页)
MyPage.Parameters = MyParameters;//页面所带参数
MyPage.PageIndex = PageIndex;//当前要显示的页码
//具体样式
MyPage.PageString = "第[PageIndex]页/共[TotalPage]页 第每[PageSize]条/共[TotalRecord]条 [FirstStr] [PrevStr] [PageNumber] [NextStr] [LastStr] [TurnControl]";
string strPage = MyPage.GetShowPageStr("2", 3, 10);
labShowPage.Text = strPage;
}
*/
#endregion
简要说明#region 简要说明
/**//*
.Net通用分页类(存储过程分页版,可以完全自定义显示样式,包括中英显示).
大概思路是:主要是利用存储过程在数据库进行分页,
所以在这个类里面不涉及到数据的处理,只进行页码的显示格式处理,
配合SQL2005 的 ROW_NUMBER () 功能,能够达到更好的效果.
显示样式可以完全自定义,,用图片也可以,只是要把字符串拼成图片的Html
效果图:http://www.cnblogs.com/images/cnblogs_com/84ww/128905/r_PageStore.gif
*/
#endregion
附 存储过程例子#region 附 存储过程例子
/**//*
CREATE PROCEDURE dbo.sp_userinfoList
@strOptions varchar(200) = NULL,
@PageSize int = 20,
@PageIndex int = 1,
@Counts int = 0 OUTPUT
AS
SET NOCOUNT ON
SET ANSI_WARNINGS OFF
DECLARE @PageUp int
DECLARE @PageDown int
--处理页大小
IF @PageSize = -1 SET @PageSize = 20
--获得总记录数
SELECT @Counts = COUNT(1) FROM userinfo
--当前页的第一条记录RowID
SET @PageDown = @PageSize * @PageIndex + 1
--当前页的最后一条记录RowID
SET @PageUp = @PageSize * (@PageIndex + 1)
-- 信息列表
IF @strOptions='LIST' BEGIN
SELECT
id,
user,
password,
datetime,
content
FROM
(
SELECT * ,
PageTableRowID = ROW_NUMBER () OVER (ORDER BY id DESC)
FROM userinfo
) AS PageTableList
WHERE PageTableRowID BETWEEN @PageDown AND @PageUp
END
*/
#endregion
}