仅对jqgrid中的当前页面行进行排序
Sort only the current page rows in jqgrid
我想在页面级别的网格中实现排序功能。也就是说,如果我有 100 条记录,并且 10 条记录显示在一页中,每页有 10 行。这意味着我有 10 页,每页 10 行。
现在问题来了。如果我在下面的代码中对某些 id 列进行排序,它将对整行进行排序,并将显示当前页面中的记录 (99),该记录以前根本不存在 (1)。
现在如何为以下代码对仅出现在该页面上的记录进行排序?
示例:如果我对 page1 中的某个 ID 应用排序,那么按升序我应该显示包含 1 到 10 的一些 id,按降序它应该包含 10 到 1。我们真的可以做到这一点吗?
请帮助我解决这个问题,因为我是 jqgrid 的新手,正在寻求有关基本问题的帮助。
var myGrid = $("#mygrid").jqGrid({
datatype: 'local',
colModel: [
{ name: 'AID', label: 'Some ID', key: true, width: 100, editable: false, sorttype: "int" },
{ name: 'Name', width: 300, editable: false },
{ name: 'Group', width: 100, editable: false },
{ name: 'Info', width: 100, editable: false },
{ name: 'AValue', width: 100, editable: true, edittype: 'text' }
],
pager: '#mypager',
rowNum: 10,
rowList: [10, 20, 500],
viewrecords: true,
autowidth: true,
sortname: 'AID',
sortorder: 'desc'
});
myGrid.jqGrid('navGrid','#mypager',{edit:false,add:false,del:false,search:false});
var mydata = [];
for (var i = 0; i < 100; i++) {
mydata.push({AID:i,Name:"123",Group:"456",Info:"78",AValue:"8"});
}
myGrid.setGridParam({data: mydata}).trigger("reloadGrid");
有没有考虑过使用后端来管理分页和排序?
我使用 SQL 服务器来执行此操作,因此始终发送当前页面、pageSize、sortField、sortOder。以下是相同的示例:
CREATE PROCEDURE [dbo].[usp_GetGroupsList]
(
@PageNum INT=1,
@PageSize INT=10,
@OrderField VARCHAR(32)='id',
@OrderDir VARCHAR(8)='asc',
@name nvarchar(100) = '',
@description nvarchar(100) = ''
)
作为
开始
设置无计数;
;WITH groupList AS (
SELECT
RowNum = ROW_NUMBER() OVER(ORDER BY
CASE WHEN @OrderField = 'id' AND @OrderDir='asc' THEN g.Id END ASC,
CASE WHEN @OrderField = 'id' AND @OrderDir='desc' THEN g.Id END DESC,
CASE WHEN @OrderField = 'name' AND @OrderDir='asc' THEN g.[Name] END ASC,
CASE WHEN @OrderField = 'name' AND @OrderDir='desc' THEN g.[Name] END DESC,
CASE WHEN @OrderField = 'description' AND @OrderDir='asc' THEN g.[Description] END ASC,
CASE WHEN @OrderField = 'description' AND @OrderDir='desc' THEN g.[Description] END DESC
)
,g.Id GroupId
,g.[Name]
,g.[Description]
FROM
[cx_Security].[Groups] g
WHERE
(isnull(@name,'') = '' OR g.[Name] like '%' + @name + '%')
AND (isnull(@description,'') = '' OR g.[Description] like '%' + @description + '%')
AND g.IsActive = 1
)
SELECT
g.GroupId
,g.[Name]
,g.[Description]
,PS.TotalRec
FROM
groupList g
INNER JOIN (SELECT COUNT(RowNum) TotalRec FROM groupList) PS ON 1=1
WHERE @PageNum = 0 OR (RowNum BETWEEN (@PageNum - 1) * @PageSize + 1 AND @PageNum * @PageSize)
结束
我想在页面级别的网格中实现排序功能。也就是说,如果我有 100 条记录,并且 10 条记录显示在一页中,每页有 10 行。这意味着我有 10 页,每页 10 行。
现在问题来了。如果我在下面的代码中对某些 id 列进行排序,它将对整行进行排序,并将显示当前页面中的记录 (99),该记录以前根本不存在 (1)。
现在如何为以下代码对仅出现在该页面上的记录进行排序?
示例:如果我对 page1 中的某个 ID 应用排序,那么按升序我应该显示包含 1 到 10 的一些 id,按降序它应该包含 10 到 1。我们真的可以做到这一点吗?
请帮助我解决这个问题,因为我是 jqgrid 的新手,正在寻求有关基本问题的帮助。
var myGrid = $("#mygrid").jqGrid({
datatype: 'local',
colModel: [
{ name: 'AID', label: 'Some ID', key: true, width: 100, editable: false, sorttype: "int" },
{ name: 'Name', width: 300, editable: false },
{ name: 'Group', width: 100, editable: false },
{ name: 'Info', width: 100, editable: false },
{ name: 'AValue', width: 100, editable: true, edittype: 'text' }
],
pager: '#mypager',
rowNum: 10,
rowList: [10, 20, 500],
viewrecords: true,
autowidth: true,
sortname: 'AID',
sortorder: 'desc'
});
myGrid.jqGrid('navGrid','#mypager',{edit:false,add:false,del:false,search:false});
var mydata = [];
for (var i = 0; i < 100; i++) {
mydata.push({AID:i,Name:"123",Group:"456",Info:"78",AValue:"8"});
}
myGrid.setGridParam({data: mydata}).trigger("reloadGrid");
有没有考虑过使用后端来管理分页和排序?
我使用 SQL 服务器来执行此操作,因此始终发送当前页面、pageSize、sortField、sortOder。以下是相同的示例:
CREATE PROCEDURE [dbo].[usp_GetGroupsList]
(
@PageNum INT=1,
@PageSize INT=10,
@OrderField VARCHAR(32)='id',
@OrderDir VARCHAR(8)='asc',
@name nvarchar(100) = '',
@description nvarchar(100) = ''
)
作为
开始
设置无计数;
;WITH groupList AS (
SELECT
RowNum = ROW_NUMBER() OVER(ORDER BY
CASE WHEN @OrderField = 'id' AND @OrderDir='asc' THEN g.Id END ASC,
CASE WHEN @OrderField = 'id' AND @OrderDir='desc' THEN g.Id END DESC,
CASE WHEN @OrderField = 'name' AND @OrderDir='asc' THEN g.[Name] END ASC,
CASE WHEN @OrderField = 'name' AND @OrderDir='desc' THEN g.[Name] END DESC,
CASE WHEN @OrderField = 'description' AND @OrderDir='asc' THEN g.[Description] END ASC,
CASE WHEN @OrderField = 'description' AND @OrderDir='desc' THEN g.[Description] END DESC
)
,g.Id GroupId
,g.[Name]
,g.[Description]
FROM
[cx_Security].[Groups] g
WHERE
(isnull(@name,'') = '' OR g.[Name] like '%' + @name + '%')
AND (isnull(@description,'') = '' OR g.[Description] like '%' + @description + '%')
AND g.IsActive = 1
)
SELECT
g.GroupId
,g.[Name]
,g.[Description]
,PS.TotalRec
FROM
groupList g
INNER JOIN (SELECT COUNT(RowNum) TotalRec FROM groupList) PS ON 1=1
WHERE @PageNum = 0 OR (RowNum BETWEEN (@PageNum - 1) * @PageSize + 1 AND @PageNum * @PageSize)
结束