3

我有一个服务器端数据绑定 jqGrid。单击排序按钮时,我只想进行本地排序。

我已经这样做了:刚刚编辑:获取完整数据,然后将其排序并插入到网格中。

已编辑

var asc = true;

$(document).ready(function () {

    $("span.s-ico").click(function () {

        var allData = jQuery("#myGrid").jqGrid('getRowData');
    if (asc == true) {
        allData.sort(function (a, b) {
            if (a.myID> b.myID) return -1;
            else return 1;
        });
        asc = false;
    }
    else {
        allData.sort(function (a, b) {
            if (a.myID> b.myID) return 1;
            else return -1;
        });
        asc = true;
    }

    var alt = $.extend(true, [], allData);

    //alt.shift().shift();
    $('#myGrid').jqGrid('setGridParam', { url: null, datatype: 'local' });
    $('#myGrid').jqGrid('setGridParam', { data: alt });
    $('#myGrid').trigger("reloadGrid");
    return false;;
      //alert("I'm clicked");
    });

});

在配置如下的 jqGrid 上:

$("#myGrid").jqGrid({
        url: URL,
        datatype: 'json',
        mtype: req,
        ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
        colNames: ['AnotherColumn', 'myID'],
        colModel: [
                    { name: 'AnotherColumn', index: 'AnotherColumn', width: 105, sortable: false, editable: true },
                    { name: 'myID', index: 'myID', sortable: true, width: 185, editable: true }
                ],
        rowNum: 100,
        rowList: [],      
        pgbuttons: false,
        pgtext: "Page {0} of {1}",
        pgtext: null,
        pager: '#myGridPager',
        sortname: 'myID',
        viewrecords: false,
        sortorder: 'asc',
        sortable: true
    });
4

1 回答 1

3

首先,如果您想在本地对网格数据进行排序或搜索/过滤,您必须使用与属性值相同index的所有项目中的属性值。我建议您从列定义中删除属性。目前您使用colModel nameindex

{ name: 'AnotherColumn', index: 'Id', ...}

这是错误的。

你还有很多其他重要的问题。

如果要对本地数据进行排序,则必须先填写本地数据。jqGrid 支持data和内部_index选项。通常需要在输入选项中指定本地数据data。在这种情况下,jqGrid在构建网格期间对本地数据进行排序,然后显示数据的第一页。如果使用datatype: 'json' 在填充网格的显示页面时会填充loadonce: true内部参数。data输入数据可以包含更多作为一页。

如果您datatype: 'json' loadonce: true使用选项,则 nodata将被填充。因此,在更改为datatype'local'之后data将是网格的源,并且使用sortGrid方法进行排序将遵循populate仅重新加载网格的方法的调用。如果为 datatype: 'local'data,您将有空网格。

告诉信任我不明白你的确切要求。如果您没有太多可以显示在网格中的总日期(例如少于 1000 行),您可以使用选项loadonce: true. URL数据需要进行初始排序,或者您可以使用此处描述的技巧。如果你有非常大的数据集(例如 10000 行),你必须实现服务器端数据的排序和分页。对一小部分(一页)数据进行排序可能会导致对使用网格的用户的误解。

无论如何,我建议您向网格添加gridview: true和选项。autoencode: true

于 2013-05-20T13:43:20.400 回答