1

我真的很困惑,我使用 jqgrid 的程序每次单击列标题时都不会排序(降序)?我尝试创建一个使用本地数据(.json 数据)的程序,当我单击列标题时,它在排序方面效果很好。那么第一个有什么问题呢?我正在使用来自客户端服务器的数据....

这是我的 JavaScript 代码:

  $("#btnQueryMainAccountGroups").click( function() {
    var params = {
      "SessionID": $("#eSessionID3").val(),
      "dataType": "data"
    }
    $('#tblData').setGridParam({
      url:'process.php?path=' + encodeURI('masterData/data') + '&json=' + encodeURI(JSON.stringify(params)), 
      datatype: olSettings.ajaxDataType,  
    });
    $('#tblData').trigger('reloadGrid');
    }); 

    $("#tblData").jqGrid({
    url: '',
    datatype: '',
    jsonReader : {
      root: function(obj) {
        var root = [];

    if  ('error' in obj) 
    {
      showMessage(obj.error['class'] + ' error: ' + obj['error']['msg']);
    }
    else
    {
      $.each(obj['result']['main']['rowdata'], function(rowIndex, rowDataValue) {
        var row = {};
        $.each(rowDataValue, function(columnIndex, rowArrayValue) {
          var fldName = obj['result']['main']['metadata']['fields'][columnIndex].name;
          row[fldName] = rowArrayValue;                
        });
        root[rowIndex] = row;
      });
    };
    return root;
  },
  page: "result.main.page",
  total: "result.main.pageCount",
  records: "result.main.rows",
  repeatitems: false,
  id: "0"
},
serializeGridData: function(postData) {
  var jsonParams = {
    'SessionID': $('#eSessionID3').val(),
    'dataType': 'data',
    'recordLimit': postData.rows,
    'recordOffset': postData.rows * (postData.page - 1),
    'rowDataAsObjects': false,
    'queryRowCount': true,
    'sort_fields': postData.sidx
  };

  return 'json=' + JSON.stringify(jsonParams);
},

},
colNames:['ID','Code', 'Description','Type'],
colModel:[
  {name:'group_id'},
  {name:'group_code',align:'center',width:100},
  {name:'group_desc'},
  {name:'type'}
],

viewrecords: true,
rowList:[5,10,50,100],
pager: '#tblDataPager',
sortname: 'group_desc',
sortorder: 'asc',
rowNum:5,
loadonce:false,
caption: "MainGroup"
});

$("#tblData").setGridWidth($(window).width() - 70);
$("#tblData").jqGrid('sortableRows');

这是我在 javascript 中的代码,我无法对我的 jqgrid 进行排序...我的 process.php 代码:

 <?php 
     print(file_get_contents("http://localhost/" .... "?json=" . $_GET["json"]));
 ?>

将数据加载到 jqgrid 没有问题。唯一的问题是我无法按降序对它们进行排序。每次单击列标题时,它只会升序排序,如果再次单击,则不会发生降序。有什么问题?

4

3 回答 3

1

您应该在必填字段的 colModel 中 使用sortable: true ,如下所示:

colModel:[
 {name:'group_id', sortable: true},
 {name:'group_code',align:'center',width:100, sortable: true},
 {name:'group_desc', sortable: true},
 {name:'type', sortable: true}
],

您现在应该能够正确排序。

于 2011-09-29T11:06:25.293 回答
0

使用来自服务器的数据时,您必须提供现成的数据:有序和分页。

为此,jqgrid 在请求中发送变量sidxsord,其中包含列名和排序(“desc”表示降序)。

请参阅教程以获取更多帮助和 PHP 示例。

于 2011-03-15T09:28:03.397 回答
0

尝试使用loadonce:true, 您正在使用loadonce:false

里面写着

If this flag is set to true, the grid loads the data from the server only once (using the appropriate datatype). After the first request, the datatype parameter is automatically changed to local and all further manipulations are done on the client side. The functions of the pager (if present) are disabled.

于 2016-02-08T13:42:48.980 回答