jqGrid - 通过Json动态添加行

时间:2011-03-17 09:12:16

标签: jquery json jqgrid

我正在尝试根据用户放入文本框的值动态地向jqGrid添加行。有一种方法可以从服务器获取Json请求,但是我在添加实际数据时遇到了问题。

以下是 jqGrid代码

function RenderGrid(grid) {
$("#queryGrid").jqGrid({
    datatype: grid.DataType,
    mtype: grid.RequestType,
    colNames: grid.ColumnNames,
    colModel: grid.ColumnModel,
    pager: $('#pager'),
    rowNum: grid.MaxViewableRows,
    caption: "Search",
    width: grid.Width,
    rowList: grid.MaxViewableRowOptions,
    height: grid.Height,
    loadtext: "Please wait...",
    viewrecords: grid.ShowTotalRecords,
    hidegrid: grid.HideEnabled,
    forceFit: true
})

我没有设置URL选项,因为正如我之前提到的,数据来自其他地方。但是这是colModel

{"name":"id","index":"id","hidden":"true"},
{"name":"Customer","index":"Customer","sorttype":"Int32","editable":false,"width":216,"resizable":true},
{"name":"ShortName","index":"ShortName","sorttype":"String","editable":false,"width":216,"resizable":true},
{"name":"CorrespondenceName","index":"CorrespondenceName","sorttype":"String","editable":false,"width":216,"resizable":true}

以下是获取JSON的代码

function SearchGrid() {
    $.ajax({
        url: $.url("/MyController/MyAction"),
        type: "POST",
        dataType: "json",
        data: {
            Name: $('#Name').val(),
            Fields: $('#Fields').text(),
        },
        success: ApplyDataToGrid //More on this later in the question
    });
}

这一切看起来如何正常。我不认为问题与上述任何代码有关。这是它变得棘手的地方,这是我获取JSON对象的地方以及当我尝试将其添加到网格时。

这是我回来的 JSON

{"page":1,"records":1,"rows":[{"id":1,"cell":[94,"DAMIEN","IS AN IDIOT"]}],"total":1}

这是代码我用来(尝试)将数据添加到网格

function ApplyDataToGrid(data) {
    $("#queryGrid")[0].addJSONData(data, $("#queryGrid").bDiv, 0)   
}

function ApplyDataToGrid(data) {
    $("#queryGrid")[0].addJSONData(data)   
}

应用页数和记录计数,但它不显示应添加ID和三列的行!

有什么想法吗?这让我疯狂! 提前致谢, 达明

2 个答案:

答案 0 :(得分:2)

由于您正在调用MVC控制器来获取json数据,我建议您执行Oleg建议我here的操作。 您可以将jqGrid预先加载为空,然后当用户单击按钮或更改文本框中的某些文本时,您可以触发网格的重新加载:myGrid.trigger('reloadGrid',[{page:1}]);

您的网格将获取已更改的字段并将其与请求一起发送:

postData: {
            Param1: function() { return $("#Filter1").val(); },
            Param2: function() { return $("#Filter2").val(); }
        }, 

如果您正在使用ASP.NET MVC 2或3以及POST您的数据,那么您的操作将如下所示:

  [HttpPost]
    public JsonResult SuccesMsg()
    {
        return Json(yourdata, JsonRequestBehavior.DenyGet);
    }

答案 1 :(得分:1)

目前尚不清楚您拥有哪种方案,因为您希望将数据附加到网格中,并且还希望拥有正确的页数和记录数。 jqGrid支持很多设置。您在测试网格中使用哪些设置确实存在问题。像datatype: grid.DataType这样的代码太笼统了。如果您在测试中使用的所有jqGrid参数的值都包含在内,那将非常有用。

设置sorttype":"String""sorttype":"Int32"肯定是错误的。您的意思是sorttype:"int"和默认sorttype:"text"

可能您可以使用包含完整网格数据的data参数更好地填充网格。如果您确实需要将数据附加到现有网格中而不重新创建它,则可以使用适用于所有数据类型的addRowData。它允许每次调用addRowData时向网格添加数据数组。

还有一个问题:您的网格有4列,您只包含三列的值:[94,“DAMIEN”,“IS AN IDIOT”]。这看起来很奇怪。可能你想用[“1”,“94”,“DAMIEN”,“IS AN IDIOT”]?如果在“id”列中包含“key:true”并包含jsonReader:{cell:""},则可以从

更改JSON数据项
{"id":1,"cell":["1","94","DAMIEN","IS AN IDIOT"]}

["1","94","DAMIEN","IS AN IDIOT"]

(见here)。

如果您准备了一个没有任何 grid.DataType的示例,那将会容易得多。只有在它运作良好之后,你才能使它更有动力。