三、服务器查询出数据,发往前端
1、首先前端调用了服务器的某个函数,比如叫:
User_GetPagedList(int PageIndex, int PageSize, Dictionary<string, object> Condition, string OrderBy)
在这里需要传递四个参数:第几页、每页记录条数、查询条件、排序条件。
2、然后服务器要处理这传过来的四个参数:
a、根据 Condition 拼接查询条件;
b、把 OrderBy 也并入查询条件;
c、得出查询结果的记录总条数;
d、得出查询结果的总页数;
最后拼接出的查询SQL语句如下示例:
WITH Tmp AS(
SELECT ROW_NUMBER() OVER (ORDER BY UserAge Desc) AS SortNum,A.ID,A.UserName,A.UserAge,A.HasHouse,A.UserBirthDay FROM dbo.User A WITH(NOLOCK)
WHERE 1=1 AND A.[HasHouse]='true'
)
SELECT * FROM Tmp A WHERE SortNum BETWEEN @StartNum AND @EndNum ORDER BY UserAge Desc
上面的@StartNum和@EndNum是需要传入的两个参数,那么最终前端显示出的数据就是这两个数字之间的记录,
比如BETWEEN 10 AND 19,表示显示从第10条到第19条数据。
然而还有一种特殊情况,那就是如果不想分页,直接将所有数据显示到第一页,则前端传过来的 PageIndex 和 PageSize 都为0,
那么SQL语句里就不要有查询从哪条到哪条的条件,而且服务器端代码要这么处理:
if (PageIndex == 0 && PageSize == 0)
{
PageIndex = 1;
PageSize = list.Count;
TotalCount = list.Count;
}
得到的数据:
public override PagedList<User> User_GetPagedList(int PageIndex, int PageSize, Dictionary<string, object> Condition, string OrderBy)
{
//TO DO...
//list:查询出来的结果,PageIndex:第几页,PageSize:每页的记录条数,TotalCount:记录总条数
return new PagedList<User>(list, PageIndex, PageSize, TotalCount);
}
然后这样的数据还不能直接返回到前端,还需要做处理:
PagedList<User> pg = userBll.User_GetPagedList(PageIndex, PageSize, Condition, OrderBy);
jsonResult.Obj = new PagedList(pg.List, pg.PageIndex, pg.PageSize, pg.TotalCount);
return jsonResult.ToJson(true);