我正在使用自定义按钮向网格添加数据。如果网格中已存在数据,则会正确添加新行。但是如果网格是空的并且我添加了新行,它会给出Uncaught TypeError:t.p.data.push不是jqgrid源文件中的函数错误。用于添加新行的代码如下所示
var rows = $("#" + gridName).getDataIDs();
$("#" + gridName).jqGrid("addRowData", rows.length + 1, {
Id: rows.length + 1},'first');
$("#" + gridName).editRow(rows.length + 1, true);
我正在使用自定义导航栏添加和编辑网格。
使用以下代码创建网格 createJqGrid:function(gridId,columns,gridData){
$("#"+gridId).jqGrid({
datatype: 'local',
data: gridData,
editurl: 'clientArray',
colModel: columns,
loadonce: false,
//width: '100%',
autowidth: true,
shrinkToFit:false,
height: 250,
rownumbers: false,
multiselect: true,
cellEdit: true,
toppager: true,
cloneToTop: true,
rowNum: 10000,
pager: "#pager"+gridId,
cellsubmit: 'clientArray',
ondblClickRow: function(rowid, iRow, iCol) {
//$("#save" + gridId).removeClass("ui-state-disabled");
},
beforeSelectRow: function(rowid, e) {
return true;
},
beforeCellSelect: function(rowid, e) {
return true;
},
afterEditCell: function(rowid, cellName, cellValue, iRow, iCol) {
var cellDOM = this.rows[iRow].cells[iCol];
$(cellDOM).removeClass("ui-state-highlight");
$("#save" + gridId).removeClass("ui-state-disabled");
},
onCellSelect: function(rowid, celname, value, iRow, iCol) {
//$("#save" + gridId).removeClass("ui-state-disabled");
return true;
},
loadComplete: function() {
}
});
$("#"+gridId).navGrid("#pager"+gridId, {
cloneToTop: true,
edit: false,
search: false,
add: false,
del: false,
refresh: false,
view: false
});
创建网格后,根据一些调用,我更新网格的gridData。
使用
添加工具栏 grid.jqGrid('navButtonAdd', '#' + grid[0].id + '_toppager_left', { // "#list_toppager_left"
caption: "",
title: "Add",
id: 'add' + gridName,
onClickButton: function() {
// perform something...
var rows = $("#" + gridName).getDataIDs();
$("#" + gridName).jqGrid("addRowData", rows.length + 1, {
Id: rows.length + 1
},'first');
$("#" + gridName).editRow(rows.length + 1, true);
// Call this whenever Save button needs to be Enabled
$("#save" + gridName).removeClass("ui-state-disabled");
}
});
当网格有一些数据时,addRowData可以工作,但是当网格为空时,它会给出错误
if(t.p.datatype === 'local') {
lcdata[t.p.localReader.id] = id;
t.p._index[id] = t.p.data.length;
t.p.data.push(lcdata); // Error comes on this line
lcdata = {};
}
答案 0 :(得分:0)
您使用data
指定gridData
。当网格为空时,哪个值为gridData
""?它应该是空数组[]而不是undefined
或null
。
此外,使用var rows = $("#" + gridName).getDataIDs();$("#" + gridName).jqGrid("addRowData", rows.length + 1, {..},'first');...
填充网格是不好的,尤其是如果在循环中执行此操作并使用多行填充网格。如果行可以删除并且不仅插入,那么rows.length + 1
的使用是不好的选择。我建议您使用$.jgrid.randId()
函数,它可以生成唯一值,可以用作rowid。
答案 1 :(得分:0)
我遇到了同样的问题
错误是 我是以对象格式添加数据,例如数组而不是本地字符串 所以网格的数据类型应该是Json而不是本地
这将清除您的错误
谢谢:)