设置数据属性时,jqGrid getLocalRow返回false

时间:2016-02-11 14:24:43

标签: jquery jqgrid free-jqgrid

使用getLocalRow和数据属性

时遇到问题
var $grid;
getGrid = function () {
    $grid = $("list");
    $grid.jqGrid({
        mtype: "POST",
        colNames: [],
        colModel: [
            ....
        ],
        pager: "",
        loadonce: true,
        multiselect: true,
        gridComplete: function () {
           var data = $(this).getDataIDs();
           for(var i=0; i < data.length;i++){
                $(this).setSelection(data[i]); // select all rows by default
           }
        },
        loadComplete: function (data) {

        },
        loadError: function (xhr) {

        }
    });
    return $grid;
};

基于2种情景,有两种方法可以填充网格 在方案1中,我只是命中服务器URL并将数据作为JSON返回并填充在网格中。使用此选项,当我遍历所选行并执行getLocalRow时,我获得所需的o / p。

在方案2中,我构造了一个数据对象并将其传递给同一个网格。当我在此上下文中迭代并使用getLocalRow时,会出现问题,对于所有选定的行而不是行数据,它会变为false,但是对于getRowData可以正常工作。

方案1:

$grid.jqGrid("clearGridData");
$grid.jqGrid("setGridParam", {url: '..', datatype: "json"}).trigger("reloadGrid");

方案2:

$grid.jqGrid("clearGridData");
$grid("setGridParam", { data: MyOWNobject}).trigger("reloadGrid");        

访问getLocalRow:

var sel=[];
for (i = 0; i < $grid.jqGrid("getGridParam").selarrrow.length; i++) {
    sel.push($grid.jqGrid("getLocalRow", $grid.jqGrid("getGridParam").selarrrow[i]));
}

1 个答案:

答案 0 :(得分:0)

问题在于填充网格。网格的每一行都必须是唯一的id。如果您的数据已经有一些包含唯一数据的列,则可以使用列中的key: true来通知jqGrid将列中的值用作rowid。

我上次测试了jqGrid的最后一次使用数据,其中包含id属性的每一列中的key: true属性,该列属性值为想要用作rowid的值。如果您遵循该规则,那么您报告的问题将不存在。请参阅使用代码

的演示http://jsfiddle.net/OlegKi/y9KHY/92/
$("#submit1").click(function () {
    var $grid = $("#gGrid");
    var grps = [
            { Name : "A",  Group : "11" },
            { Name : "B" , Group : "1122" }
        ];
    $grid.jqGrid({
        data: grps,
        colModel: [
            { name: 'Name', key: true },
            { name: 'Group' }
        ],
        cmTemplate: {width: 200},
        rownumbers: true,
        multiselect: true,
        gridComplete: function () {
            $("#cb_" + this.id).click();
        }
    });
});

$("#submit2").click(function () {
    var $grid = $("#gGrid"), p = $grid.jqGrid("getGridParam"), i;

    for (i = 0; i < p.selarrrow.length; i++) {
        alert("Data  > " + JSON.stringify($grid.jqGrid("getLocalRow", p.selarrrow[i])));
    }
});

演示http://jsfiddle.net/OlegKi/y9KHY/93/在输入数据中使用id属性。

然而,一般情况下,不允许使用非完整输入数据而不指定rowid。因此,上面描述的free jqGrid的行为是一个bug。错误已在GitHub上的免费jqGrid代码中得到修复。您可以在演示http://jsfiddle.net/OlegKi/y9KHY/94/中验证它,它直接使用GitHub中的代码。我计划很快发布下一个版本。