【问题标题】:jqgrid addRowData gives error t.p.data.push is not a functionjqgrid addRowData 给出错误 t.p.data.push is not a function
【发布时间】:2016-03-03 18:23:02
【问题描述】:

我正在使用自定义按钮将数据添加到网格中。如果网格中已经存在数据,则正确添加新行。但是如果网格是空的并且我添加了新行,它会给出 Uncaught TypeError: t.p.data.push is not a function error at jqgrid source file。用于添加新行的代码如下

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 = {};
                }

【问题讨论】:

  • 你应该总是写下你使用哪个版本的 jqGrid 以及哪个 fork(free jqGridGuriddo jqGrid JS 或版本 gridData 分配data。哪个值有gridData“当网格为空时”?它应该是空数组[] 而不是undefinednull
  • 此外,使用var rows = $("#" + gridName).getDataIDs();$("#" + gridName).jqGrid("addRowData", rows.length + 1, {..},'first');... 填充网格很糟糕,特别是如果您在循环中执行此操作并用许多行填充网格。无论如何,如果行可以被删除而不仅仅是插入,那么rows.length + 1 的使用是不好的选择。我建议您改用$.jgrid.randId() 函数,它可以生成用作rowid 的唯一值
  • 谢谢奥列格。错误是数据不是空数组。修复该问题更正了问题。我还修复了代码,我没有使用 randId 而不是 rows.length。
  • 如果您将评论移至答案,我将接受它作为我问题的解决方案
  • 不客气!我很高兴能帮助你。我发布了包含相同信息的简短答案,我之前发布了评论。

标签: jquery jqgrid


【解决方案1】:

您使用gridData 分配data。哪个值有gridData“当网格为空时”?它应该是空数组 [] 而不是 undefinednull

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题

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

    这将清除您的错误

    谢谢你:)

    【讨论】:

      猜你喜欢
      • 2022-08-03
      • 2015-05-04
      • 2018-07-23
      • 2021-03-07
      • 2022-01-01
      • 2015-11-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多