【问题标题】:Losing edited cell data after paging分页后丢失编辑的单元格数据
【发布时间】:2010-07-12 13:49:12
【问题描述】:

我正在构建一个完全“客户端”的网格,但是如果我启用内联编辑,我所做的更改会在我更改网格页面时丢失。

希望有人能指出我错过了什么

下面显示了网格设置以及我调用的用于填充测试数据的函数:

var myGrid;
var lastgridsel;
jQuery(document).ready(function() {
    myGrid = jQuery("#mygrid").jqGrid({
        datatype: 'local',
        colModel: [
            { name: 'AID', label: 'AID', index: 'AID', width: 100, editable: false,
              sorttype: "int" },
            { name: 'MS', label: 'MS', index: 'MS', width: 300, editable: false },
            { name: 'GROUP', label: 'GROUP', index: 'GROUP', width: 100,
              editable: false },
            { name: 'REV', label: 'REV', index: 'REV', width: 100,
              editable: false },
            { name: 'OPT', label: 'OPT', index: 'OPT', width: 100, editable: true,
              edittype: 'text' }
        ],
        pager: '#mypager',
        rowNum: 10,
        rowList: [10, 20, 500],
        viewrecords: true,
        loadonce: true,
        autowidth: true,
        sortname: 'AID',
        sortorder: 'desc',
        cellsubmit: 'clientArray',
        onSelectRow: function(id) {
            if (id && id !== lastgridsel) {
                jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray');
                jQuery('#mygrid').editRow(id, true);
                lastgridsel = id;
            }
        }
    });
});

var mydata = [];
function InitNew() {
    for (var i = 0; i < 100; i++) {
        mydata.push({ AID: i, MS: "123", GROUP: "456", REV: "78", OPT: "8" });
    }
    myGrid.setGridParam({ data: mydata }).trigger("reloadGrid");
}

这显示 10 页,100 条记录。如果我单击“OPT”列,我可以更改文本框中的值,当我单击另一行时,数据似乎已保存。但是,一旦我转到另一页并返回第一页,数据就会恢复到原来的值。

【问题讨论】:

    标签: jqgrid pagination


    【解决方案1】:

    我不确定这是否是 3.7.x 版本中的错误,但目前如果您保存本地数据关于内联编辑(saveRoweditRow 方法)jqGrid 的内部数据参数将不会修改

    要解决这个问题,您可以定义类似的函数

    var myAfterSave = function(rowid, response) {  // aftersavefunc
        var index = parseInt(rowid, 10);
        var d = myGrid.getGridParam("data");
        var rowdata = myGrid.getRowData(rowid);
        d[rowdata.AID].OPT = rowdata.OPT;
    };
    

    并修改行

    jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray');
    jQuery('#mygrid').editRow(id, true);
    

    到线

    jQuery('#mygrid').saveRow(lastgridsel, false, 'clientArray', null, myAfterSave);
    jQuery('#mygrid').editRow(id, true, null, null, 'clientArray', null, myAfterSave);
    

    【讨论】:

      【解决方案2】:

      Oleg - 谢谢一百万。您的答案非常有效。我在官方 jqgrid 支持论坛上发布了这个问题,还有另一种解决方法可以提供帮助。线程在http://www.trirand.com/blog/?page_id=393/help/losing-edited-cell-data-after-paging/#p18567

      总结:如果使用纯客户端代码构建网格,则需要替换

      myGrid.setGridParam({ data: mydata }).trigger("reloadGrid");
      

      myGrid.setGridParam({ data: mydata });
      myGrid[0].refreshIndex();
      myGrid.trigger("reloadGrid");
      

      【讨论】:

      • 我还应该提到它需要在选项中添加一行:localReader : {id:'AID'},
      • 现在我们有了一个可行的解决方案,真是太好了!我刚才在jqGrid的文档中写了refreshIndex方法的包含描述的建议(见trirand.com/blog/?page_id=393/bugs/…)。
      猜你喜欢
      • 2017-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 2013-09-13
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多