代码之家  ›  专栏  ›  技术社区  ›  jqwha

分页后丢失编辑的单元格数据

  •  1
  • jqwha  · 技术社区  · 14 年前

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

    希望有人能指出我遗漏了什么

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

    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");
    }
    

    2 回复  |  直到 7 年前
        1
  •  2
  •   Oleg    14 年前

    我不确定它是否是3.7.x版本中的一个错误,但目前如果您保存有关内联编辑的本地数据( saveRow editRow 方法)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
  •  0
  •   jqwha    14 年前

    奥列格-非常感谢。你的回答很有效。我在官方的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");