1

如果我将本地数据(一行)添加到现有的 jqgrid,自动生成的值$.jgrid.randId()似乎是错误的。我需要新的行 ID 以进行进一步操作。

var mydata = [
    {id: '12', thingy: "abc"}, 
    {id: '34', thingy:"def"}, 
    {id: '56', thingy: 'ghi'}
];

$("#grid").jqGrid({
    data: mydata ,
    datatype: 'local',
    gridview: true,
    height: 'auto',
    autoencode: true,
    rowNum: 3,
    colModel: [{
        name: 'id',
        width: 60,
    },{
        name: 'thingy',
        width: 90,
    }],
    caption: "Stack Overflow Example",
    ondblClickRow: function(rowid) {
        console.log(rowid);  // print current row id
    }
});

$('#UpdateGridButton').click(function(){
    var p = $('#grid').getGridParam();
    console.log("found gridParamData:", p.data);
    if (p.data){
        var newData = [
            {id: '78', thingy: "jkl"}
        ];
        var rowId = $.jgrid.randId(); // new row ID
        $("#grid").jqGrid('addRowData', rowId, newData);
        console.log(rowId); // print new row id
    }    
});

请参阅此小提琴和控制台输出(单击该行 2 次):http: //jsfiddle.net/quK3s/

你看,如果你添加一个新行,行 id 是“jqg1”,但实际上它插入了一个带有“jqg2”的行(用萤火虫检查,如果双击该行,请参阅控制台输出)

任何想法如何解决这个问题?或者它是一个错误?

正如我在这个问题https://stackoverflow.com/a/9218310/2221820中看到的那样,我认为该函数是错误的,它应该是预增量而不是$.jgrid.guid++.

有什么想法吗?

更新:

我最终使用了

var rowId = $.jgrid.uidPref + (++$.jgrid.guid);

但任何更好的解决方案/想法将不胜感激。

4

1 回答 1

1

在阅读源代码并检查文档后,这不是错误。

您必须添加单行作为对象,然后您可以指定 rowId。如果您将数据添加为对象数组,则“rowid 应包含数据对象的名称,该名称应充当行的 id” http://www.trirand.com/jqgridwiki/doku.php?id=wiki:methods(添加行数据)

更新了小提琴并且它正在工作:http: //jsfiddle.net/quK3s/6/

    ...
    var newData = {id: '78', thingy: "jkl"};
    ...
于 2014-09-19T16:37:06.527 回答