我想在页面级别的网格中实现排序功能。也就是说,如果我有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");
答案 0 :(得分:1)
您是否考虑过使用后端来管理分页和排序?
我使用SQL Server来执行此操作,因此始终发送当前页面,pageSize,sortField,sortOder。以下是相同的示例:
CREATE PROCEDURE [dbo].[usp_GetGroupsList]
(
@PageNum INT = 1,
@PageSize INT = 10,
@OrderField VARCHAR(32)=&#39; id&#39;,
@OrderDir VARCHAR(8)=&#39; asc&#39;,
@name nvarchar(100)=&#39;&#39;,
@description nvarchar(100)=&#39;&#39;
)
如
开始
SET NOCOUNT ON;
;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)
END