仅对jqgrid

时间:2016-01-26 17:52:11

标签: javascript jquery asp.net-mvc sorting 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");

1 个答案:

答案 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