使用动态列和模型加载AJAX成功的JQGRID

时间:2016-09-01 03:13:53

标签: json dynamic jqgrid load

我已经做了足够多的研究,但仍然是一个谜。 我从服务器中提取了表模式,以创建工作正常的列(result.colNames)和模型(result.colModel)。

在相同的结果上,我正在拉表数据(result.colD)以在成功时填充到JQgrid。

网格在成功时创造良好,但数据未加载到其中。

这是代码和截图。

我花了很多时间在这里,然后在这里发帖..希望这将在这里得到解决。

$.ajax({
                   type: "GET",
                   url: "webapi/do/pullSchema/"+display,
                   data: "",
                   dataType: "json",
                   success: function(result)
                   {

                        colD = JSON.stringify(result.colData); 
                        colN = result.colNames;
                        colM = result.colModel;

                        jQuery("#list").jqGrid({ 
                            data:JSON.parse(colD),datatype: "local",
                            colNames:colN,  colModel :colM,
                            pager: jQuery('#pager'),
                            rowNum: 5,
                            rowList: [5, 10, 20, 50],
                            viewrecords: true,
                            caption: 'DAta from table',
                            loadtext:'Loading, please wait'});


                   },
                   error: function(x, e)
                   {
                        alert(x.readyState + " "+ x.status +" "+ e.msg);   
                   }
                });

下面是样本数据集:

[dbname=null, tables=null, ColNames=[Plan_code, LOB], 
colModel=[{name:'Plan_code',index:'Plan_code',width:255}, {name:'LOB',index:'LOB',width:255}], colData=[{LOB=N, Plan_code=C82ACC}, {LOB=P, Plan_code=C82ACC}, {LOB=B, Plan_code=C82ACC}, {LOB=I, Plan_code=C82ACC}, {LOB=I, Plan_code=C82IRA}, {LOB=R, Plan_code=C82IRA}]

2 个答案:

答案 0 :(得分:0)

问题是colData不是jqgrid期望它的格式json(这是许多jqgrid开发人员常犯的错误)

有关详细信息,请参阅Here中的问题。

因此,在您的情况下,修复将是操纵colData并创建正确的json。

colRows=[{LOB=N, Plan_code=C82ACC}, {LOB=P, Plan_code=C82ACC}, {LOB=B, Plan_code=C82ACC}, {LOB=I, Plan_code=C82ACC}, {LOB=I, Plan_code=C82IRA}, {LOB=R, Plan_code=C82IRA}]

colData = {
"total": 1,
"page": 1,
"records": colRows.count,
rows:[{LOB=N, Plan_code=C82ACC}, {LOB=P, Plan_code=C82ACC}, {LOB=B, Plan_code=C82ACC}, {LOB=I, Plan_code=C82ACC}, {LOB=I, Plan_code=C82IRA}, {LOB=R, Plan_code=C82IRA}]
}



 Send this to jqgrid and then it will know how to display it.

答案 1 :(得分:0)

问题已解决:

使用下面的函数来创建动态列标题和列模型。 function getColNames(data){         var keys = [];         for(数据中的var键){             if(data.hasOwnProperty(key)){                 keys.push(键);             }         }

    return keys;
}

function  getColModels(data) {
    var colNames= getColNames(data);
    var colModelsArray = [];
    for (var i = 0; i < colNames.length; i++) {
        var str;
        if (i === 0) {
            str = {
                name: colNames[i],
                index:colNames[i],
                key:true,
                editable:true
            };
        } else {
            str = {
                name: colNames[i],
                index:colNames[i],
                editable:true
            };
        }
        colModelsArray.push(str);
    }

    return colModelsArray;
}