我正在尝试根据用户放入文本框的值动态地向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和三列的行!
有什么想法吗?这让我疯狂! 提前致谢, 达明
答案 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:""}
,则可以从
{"id":1,"cell":["1","94","DAMIEN","IS AN IDIOT"]}
到
["1","94","DAMIEN","IS AN IDIOT"]
(见here)。
如果您准备了一个没有任何 grid.DataType
的示例,那将会容易得多。只有在它运作良好之后,你才能使它更有动力。