jqgrid addRowData给出错误t.p.data.push不是函数

时间:2015-09-30 00:46:24

标签: jquery jqgrid

我正在使用自定义按钮向网格添加数据。如果网格中已存在数据,则会正确添加新行。但是如果网格是空的并且我添加了新行,它会给出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 = {};
                }

2 个答案:

答案 0 :(得分:0)

您使用data指定gridData。当网格为空时,哪个值为gridData""?它应该是空数组[]而不是undefinednull

此外,使用var rows = $("#" + gridName).getDataIDs();$("#" + gridName).jqGrid("addRowData", rows.length + 1, {..},'first');...填充网格是不好的,尤其是如果在循环中执行此操作并使用多行填充网格。如果行可以删除并且不仅插入,那么rows.length + 1的使用是不好的选择。我建议您使用$.jgrid.randId()函数,它可以生成唯一值,可以用作rowid。

答案 1 :(得分:0)

我遇到了同样的问题

错误是 我是以对象格式添加数据,例如数组而不是本地字符串 所以网格的数据类型应该是Json而不是本地

这将清除您的错误

谢谢:)