我像这样初始化网格:
$("#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。我已经要求改变这种行为,但我希望我不得不在他的代码中挖掘它以使其正常工作。
答案 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都在空格的位置创建了下划线,一切都很好。