【问题标题】:JSON Data is not populating in JqgridJqgrid 中未填充 JSON 数据
【发布时间】:2014-12-05 10:08:21
【问题描述】:

我的代码隐藏中有一个方法,它将返回字符串 jSON 数据。我已经使用 AJAX 调用来调用它并且我得到了数据。但我无法将数据加载到 Jqgrid。

$("#tblFormData").jqGrid(
      {
          url:"Forms.aspx/ConvertDataTabletoString",
          datatype: 'jsonstring',
          colNames: ['Category_Id', 'Category'],
          colModel: [
                         { name: "Category_Id", index: "Category_Id", editable: false },
                         { name: "Category", index: "Category", editable: true }
          ],

          viewrecords: true,
          loadonce: true,
          gridview: true,
          autoencode: true,
         
          rowNum: 10000,



      });

下面是我使用 Ajax 调用时得到的数据

[
{
"Category_Id":1, "类别":"sss 表格"

}, {
"Category_Id":1, “类别”:“sss 表格” } ]

因此,如果我将其分配给一个变量,然后将其分配给一个 gridview,它就可以正常工作。但不是直接的。

 var subgridData1 = [
    {
        "Category_Id": 1,
        "Category": "sss Forms"
    },
    {
        "Category_Id": 1,
        "Category": "sss Forms"
    },
   
   ]

    $.ajax({
    type: "POST",
    url: "Forms.aspx/ConvertDataTabletoString",
    data: "{}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (msg) {

        debugger;
        //var formJsondata = msg.d;
        $("#tblFormData").jqGrid(
       {
           data: subgridData1,
           datatype:'json',
           colNames: ['Category_Id', 'Category'],
           colModel: [
                          { name: "Category_Id", index: "Category_Id", editable: false },
                          { name: "Category", index: "Category", editable: true }
           ],
          
           viewrecords: true,
           loadonce: true

         
       });

    }
});

【问题讨论】:

    标签: vb.net jqgrid jqgrid-asp.net


    【解决方案1】:

    服务器究竟会返回什么数据? (您可以将您的问题附加到测试数据中,您可以使用 Internet Explorer/Chrome/Firefox 的开发者工具来跟踪确切的 HTTP 流量)。您使用dataType: "json"contentType: "application/json; charset=utf-8" 选项进行Ajax 调用。你真的还需要打电话给JSON.stringify吗(见var mydata = JSON.stringify(msg);这一行)。如果需要您在服务器端进行不必要的 JSON 到 JSON 的转换。典型的错误是 unneeded 在服务器端调用 JavaScriptSerializerDataContractJsonSerializer 并从 Web 方法返回字符串而不是对象。您应该删除服务器端的调用,您将拥有 msg 作为对象。

    success 内部的代码似乎也是错误的。您没有指定datatype 参数,因此将使用默认值"xml"。参数datastr 将被忽略,对url: "" 的请求将被完成。服务器需要 XML 格式。 取决于服务器返回的数据格式你需要使用datatype: "jsonstring"datatype: "local"

    或者,您可以将url: "Forms.aspx/ConvertDataTabletoString"datatype: "json"loadonce: true 选项一起使用到jqGrid 选项列表中。不需要单独的 Ajax 调用。

    您应该在 jqGrid 中添加gridview: trueautoencode: true 选项。如果您不想使用本地分页,您应该添加寻呼机选项(或toppager: true)或使用rowNum: 10000。您应该考虑将key: true 属性添加到Category_Id 列。

    【讨论】:

    • 嗨 Oleg 非常感谢您的快速回复。我已经按照你说的修改了代码。以另一种方式,我可以获取数据并通过本地分配的数据将其显示到页面中。但是我无法将相同的数据分配给网格。我会用数据给你发代码
    • 我现在修改了我的问题。你现在能调查一下吗? @Oleg
    • @Parthhu:您仍然使用错误的 jqGrid 选项。 datatype:'json' 表示 jqGrid 必须向您发出 Ajax 请求到由 url 选项指定的 URL。在这种情况下,data 选项将被忽略。因此,如果要在 data 选项中指定输入数据,则必须使用 datatype: "local"。之后,您应该会在网格中看到数据。 loadonce: true 选项仅在使用 datatype:'json' 的情况下才有意义。我强烈建议您至少包括我在回答中描述的其他选项:gridview: true, autoencode: true, rowNum: 10000
    • 谢谢@Oleg。一切正常。我已将 JSON 数据转换为数组,然后将数据绑定到 Jqgrid。 var parsed = JSON.parse(formJsondata); var arr = []; for (var x in parsed) { arr.push(parsed[x]); } for (var i = 0; i
    • @Parthhu:不客气!如果没有parsed 数据的示例,很难更改上述代码,但您应该永远在循环中使用addRowData。这是我知道的填充网格的最慢方法。您应该通过var p = $("#tblFormData").jqGrid("getGridParam"); 获取jqGrid 的参数,将p.data 替换为新的项目数组(类似于p.data = arr;)并设置p._index = {}; 毕竟您应该触发reloadGrid:$("#tblFormData").trigger("reloadGrid"); 以使用新分配的数据刷新网格.它还可以对数据进行排序和分页。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多