在未显示的免费jqgrid中添加新行

时间:2017-05-15 10:38:50

标签: jquery free-jqgrid

我想在我的网格中添加一行,它使用免费版的jqgrid。 因为内置添加按钮不是很直观,我使用单独的添加按钮。 所以我想做这样的事情;

$("#btnAddContract").click(function () {
    var id = $("#ContractId").val();
    var url = GetHiddenField("sir-selected-contract-url") + id + "/add";
    var callback = contractAdded;
    dataService.addSelectedContract(url, callback);
});

var contractAdded = function (data) {
    var grid = $("#grid");
    var position = 0;
    grid.insertRow(data, position); // pseudo code - this cannot work
}

当然grid.insertRow方法不存在。我应该用什么来做这项工作?

1 个答案:

答案 0 :(得分:0)

jqGrid具有方法addRowData,允许向网格添加新行。您没有发布用于创建 jqGrid的JavaScript代码。因此,我必须猜测一些事情。

首先,如果您使用本地网格(datatype: "local"),则添加该行是纯粹的本地更改jqGrid而不与服务器进行任何通信。方法addRowData是低级方法。它允许添加新行而不用强制排序数据,而无需测试页面的当前大小。因此,您可以在网格的任何其他行之前/之后添加行。添加行后,行数可能会大于页面大小。

了解网格的每一行都有id属性(rowid)非常重要。见here。新行的id值是addRowData的第一个参数。 addRowData的第二个参数是包含行数据的对象。第三个参数指定网格中新行的位置。它可以是:"first""last""before""after""afterSelected""beforeSelected"。仅当您使用addRowData"before"作为3-d参数时,才应指定"after"的第4个参数。它指定行的rowid,在之前/之后应添加新行。

向网格添加新行的另一种可能性是以下代码:

var p = $("#grid").jqGrid("getGridParam"); // get reference to all parameters
p.data = newData; // replace the data array to another data
$("#grid").trigger("reloadGrid", { current: true }); // reload holding the selection

可以看到上述代码可用于替换网格数据与其他数据。可能需要花费更多时间作为addRowData的调用,但该方法的一大优势是:您将看到正确排序的数据。页面大小和寻呼机中的信息也绝对正确。我建议您测试两种方式,看看哪种方式更符合您的要求。