jqgrid viewGridRow()不更新行更改的所有字段

时间:2012-01-04 17:35:57

标签: jqgrid

我像这样初始化网格:

$("#mainGrid").jqGrid({
    url : g_MainGridUrl,
    datatype : 'json',
    height : 460,
    autowidth : true,
    colNames : g_ColNames,
    colModel : g_ColModel,
    pager : '#pager',
    rowNum : 100,
    rowList : [100, 200, 300],
    sortname : g_DefaultSort,
    sortorder : 'desc',
    sortable: true,
    viewrecords : true,
    caption : 'Results',
    hidegrid : false,
    rownumbers : true,          
    jsonReader : {
        root : "ROWS",
        page : "PAGE",
        total : "TOTAL",
        records : "RECORDS",
        cell : "",
        id : g_DefaultSort
    },
    loadComplete: function(){
        var num_records = $('#mainGrid').getGridParam('records');
        $('#gview_mainGrid div.ui-jqgrid-titlebar span').html('Results: '+num_records);
    },
    loadBeforeSend : function(thisXhr) {
        xhr = thisXhr;
    },
    ondblClickRow: function(rowid) {
        jQuery(this).jqGrid('viewGridRow', rowid, { width: "500"});
    }
});

$("#mainGrid").jqGrid('navGrid', '#pager', {
    del : false,
    add : false,
    edit : false,
    refresh:false,
    search: false,
    view: true
});

$("#mainGrid").jqGrid('navButtonAdd','#pager',{
    caption: "Columns",
    title: "Reorder Columns",
    onClickButton : function (){
        $("#mainGrid").jqGrid("columnChooser", {
            done: function() {
                resize_the_grid();
            },
            height: 320
        });
    }
});

并在构建过滤器对象后调用网格:

$('#mainGrid').setGridParam({
        url : g_MainGridUrl + Ext.util.JSON.encode(filter)
    });
$('#mainGrid').trigger("reloadGrid");   

正如主题所述,当我双击一行以查看其记录然后从模式对话框更改行时,并非所有列都会更新 - 有些列会更新,有些则不会更新。我认为这可能是因为我没有为表定义,所以我尝试添加它们。我已经下载了最新版本(4.2.0)。没有显示错误。这在IE8,Chrome,Safari中都是如此。有什么想法吗?

更新:我认为我找到了原因,但仍然没有解决方案。似乎任何名称中带有空格的列都无法正确读取网格。我通过添加下划线来确认替换标题中的空格,并发现对于每个更正的列,其值开始更新。我在Trirand提交了一份错误报告。

更新2:似乎已经提交了错误报告: trirand forum - 但是,作者并不认为这是一个错误,而是希望开发人员不要使用带空格的列标题,因为jqgrid会根据列模型中的名称构建ID。我已经要求改变这种行为,但我希望我不得不在他的代码中挖掘它以使其正常工作。

1 个答案:

答案 0 :(得分:0)

由于开发人员已经确定列名可能没有空格(不确定文档中是否提到过这一点),我通过黑客攻击jqgrid源代码修复了它。在viewGridRow()函数内,添加以下行:

nm = nm.replace(' ', '_');

在两个地方;首先在函数createData()中的这两行之间:

nm = this.name;
setme = false;

第二,在函数fillData()中的这两行之间:

nm = obj.p.colModel[i].name;
// hidden fields are included in the form

现在,所有ID都在空格的位置创建了下划线,一切都很好。