jqgrid将自定义格式化程序设置为动态列集合

jqgrid将自定义格式化程序设置为动态列集合,jqgrid,Jqgrid,我正在使用jqgrid。我们正在使用jquery构建仪表板功能。不同的应用程序只需注册各自的应用程序页面,dashboard就会呈现该页面。为此,我们使用jqgrid作为jquery插件之一。下面是我的代码 var ph = '#' + placeHolder; var _prevSort; $.ajax({ url: dataUrl, dataType: "json", async: true,

我正在使用jqgrid。我们正在使用jquery构建仪表板功能。不同的应用程序只需注册各自的应用程序页面,dashboard就会呈现该页面。为此,我们使用jqgrid作为jquery插件之一。下面是我的代码

 var ph = '#' + placeHolder;  
    var _prevSort;  
    $.ajax({  
        url: dataUrl,  
        dataType: "json",  
        async: true,  
        success: function(json) {  
            pager = $('#' + pager); 
            if (json.showPager === "false") {  
                pager = eval(json.showPager);  
            }  
            dataUrl += "&jqSession=true";  
            $(ph).jqGrid({  
                url: dataUrl,  
                datatype: "json",  
                sortclass: "grid_sort",  
                colNames: JSON.parse(json.colNames),  
                colModel: JSON.parse(json.colModel),                  
                forceFit: true,  
                rowNum: json.rowNum,  
                rowList: JSON.parse(json.rowList),  
                pager: pager,  
                sortname: json.sortName,  
                caption: json.caption,  
                viewrecords: true,  
                viewsortcols: true,  
                sortorder: json.sortOrder,  
                footerrow: summaryFooter,  
                userDataOnFooter: summaryFooter,  
                jsonReader: {  
                    root: "rows",  
                    row: "row",  
                    repeatitems: false,  
                    id: json.sortName  
                },  
                gridComplete: function() {  
                    if (showFooter) {  
                        $(ph).append("<tr class=\"ui-widget-content jqgrow\"><td   style=\"overflow:visible; text-align:left;width:100%;font-weight:bold;\" class=\"ui-jqgrid-  title\" colspan=\"" + json.colNum + "\">" + json.footerRow + "</td></tr>");
                    }  
                    if (json.additionalContent != null) {  
                        $("#" + xContID).html(json.additionalContent);  
                    }  
                    $("ui-icon-asc").append("IMG");  
                    var _rows = $(".jqgrow");  
                    if (json.rows.length > 0) {  
                        for (var i = 1; i < _rows.length; i += 1) {  
                            _rows[i].attributes["class"].value =   _rows[i].attributes["class"].value.replace(" ui-jqgrid-altrow", "");  
                            if (i % 2 == 1) {  
                                _rows[i].attributes["class"].value += " ui-jqgrid-altrow";  
                            }  
                        }  
                        var gMaxHeight = getGridMaxHeight();  
                        var gHeight = ($(ph + " tr").length + 1) * ($($(".jqgrow")  [0]).height());  
                        if (gHeight <= gMaxHeight) {  
                            $(ph).parent().height(gHeight);  
                        }  
                        else {  
                            $(ph).parent().height(gMaxHeight);  
                        }  
                    }  
                    else {  
                        $(ph).prepend("<tr class=\"ui-widget-content jqgrow\"><td   style=\"overflow:visible; text-align:center;width:100%;font-weight:bold;\" class=\"ui-  jqgrid-title\" colspan=\"" + json.colNum + "\">" + gridNoDataMsg + "</td></tr>");  
                        $(ph).parent().height(60);  
                    }  
                },  
                onSortCol: function(index, iCol, sortorder) {                      
                    dataUrl = dataUrl.replace("&jqSession=true", "");  
                    $(ph).jqGrid().setGridParam({ url: dataUrl }).trigger("reloadGrid");  
                    var _colName = "#jqgh_" + index;  
//                    $(_prevSort).parent().removeClass("ui-jqgrid-sorted");  
//                    $(_prevSort).parent().addClass("ui-state-default");  
//                    $(_colName).parent().addClass("ui-jqgrid-sorted");  
//                    $(_colName).parent().removeClass("ui-state-default");  
                    _prevSort = _colName;  
                    var _rows = $(".jqgrow");  
                    for (var i = 1; i < _rows.length; i += 1) {  
                        _rows[i].attributes["class"].value =   _rows[i].attributes["class"].value.replace(" ui-jqgrid-altrow", "");  
                        if (i % 2 == 1) {  
                            _rows[i].attributes["class"].value += " ui-jqgrid-altrow";  
                        }  
                    }  
                }  
            }).navGrid('#' + pager, { search: false, sort: false, edit: false, add: false,   del: false, refresh: false }); // end of grid  
            $("#" + loadid).empty();  
            gGridIds[gGridIds.length] = placeHolder;  
            SetGridSizes();  
        },  
        error: function() {  
            $("#" + loadid).html(loadingErr);  
        }  
    });  
正如您从代码中看到的,我正在调用的column collection dynamicallyapplication页面将在响应中提供JSON,并在其中包含colNames集合。Evrything工作正常,但当我们尝试将自定义格式化程序应用于列时,唯一的问题出现了。只有当我们将colModel动态分配给jqgrid时,这个问题才会出现

感谢你的帮助


提前谢谢

我觉得你的方法很有趣。主要用于jqGrid。jqGridExport请参阅。我唯一觉得有点奇怪的是,您没有使用contentType:'application/json'作为$.ajax选项。在这种情况下,接收到的数据将由$.ajax转换为对象。下一个可疑的问题是,您没有对一个JSON.parse调用的JSON响应进行解码

如果这个建议对您没有帮助,我建议您发布一个测试JSON响应,其中包含您遇到问题的自定义格式化程序。然后,我将能够重现您的问题,而无需连接到您的服务器