【问题标题】:jqgrid formatting a complex objectjqgrid 格式化一个复杂的对象
【发布时间】:2011-09-29 18:56:07
【问题描述】:

我的服务器代码上有一个函数,它返回ElementRow 对象的列表:

public class ElementRow {
    public string AreaName { get; set; }
    public YearData CurrentYear { get; set; }
    public YearData PreviousYear { get; set; }
}

public class YearData {
    public int Value1 { get; set; }
    public int Value2 { get; set; }
}

这些类生成一个像这样的 json:

{"d":
    {
        "Total":2,
    "Page":1,
    "Records":30,
    "Rows":[
        {"AreaID":0,"CurrentYear":{"Value1":1,"Value2":2},"PreviousYear":{"Value1":1,"Value2":2}},
        {"AreaID":1,"CurrentYear":{"Value1":5,"Value2":4},"PreviousYear":{"Value1":1,"Value2":2}},
        {"AreaID":2,"CurrentYear":{"Value1":2,"Value2":1},"PreviousYear":{"Value1":1,"Value2":2}},
        {"AreaID":3,"CurrentYear":{"Value1":1,"Value2":3},"PreviousYear":{"Value1":1,"Value2":2}}
    ],
    "UserData":null
    }
}

我已定义 colModel 以支持此数据结构,并希望创建一个自定义格式化程序函数以在一列中格式化 YearData 类型的对象。我的 colModel 如下:

$("#dashboard").jqGrid({
    url: wsBaseUrl + 'MyWebService.asmx/MyMethod',
    colNames: ['Area Name','Current Year', 'Previous Year'],
    colModel: [
        { name: 'AreaName', index: 'AreaName', width: 120, template: colTextTemplate },
        { name: 'CurrentYear', index: 'CurrentYear', width: 100, align: 'center', sortable: false, formatter: YearDataFormatter },
        { name: 'PreviousYear', index: 'PreviousYear', width: 100, align: 'center', sortable: false, formatter: YearDataFormatter }
    ],
    jsonReader: {
        id: "AreaID"
    },
    pager: $('#dashboard_pager'),
    sortname: 'AreaName',
    sortorder: "asc",
    height: '250',
    rownumbers: false,
    gridview: false,
    subGrid: true,

    //subgrid definition omitted
});

然后定义YearDataFormatter函数如下:

function YearDataFormatter(cellvalue, options, rowObject) {
    var table = "<table><tr>";
    table += "<td>" + cellvalue.Value1 + "</td>";
    table += "<td>" + cellvalue.Value2 + "</td>";
    table += "</tr></table>";
    return table;
}; 

无论如何,当我尝试执行此函数时,问题是YearDataFormatter 函数内部cellvalue 参数的值未定义,而使用调试器查看它,rowObject 参数内部有一个有效值.

如何正确访问该单元格的值?

另外,是否有机会修改特定列的标题?我想创建一个两行标题,但如果我在 colNames 选项中添加标记,标题高度不会相应改变。

感谢您的支持!

【问题讨论】:

    标签: jquery jqgrid jqgrid-formatter


    【解决方案1】:

    您没有发布用于填充网格的 JSON 或 XML 数据以及 jqGrid 的定义。本地数据或在使用loadone:true 的情况下,内部数据将被保存并以另一种方式工作。所以应该根据设置使用自定义格式化程序。

    因为我没有足够的信息,所以我试着猜测。我想你应该使用

    function YearDataFormatter(cellvalue, options, rowObject) {
        var table = "<table><tr>",
            cellData = rowObject.CurrentYear; // or like rowObject[2]
        table += "<td>" + cellData.Value1 + "</td>";
        table += "<td>" + cellData.Value2 + "</td>";
        table += "</tr></table>";
        return table;
    };
    

    最好的办法是更改服务器用于date 的数据格式,并使用ISO 8601 日期格式。如果您使用.NET,您可以使用DateTime 中的"o" or "O" formatter。在这种情况下,您可以使用formatter:'date'formatter:'date', formatoptions:{srcformat:'ISO8601Long'}

    更新:我确信您在 jqGrid 定义中使用了更多的默认设置。如果没有其他设置,您将无法读取 JSON 数据。经过小的修改后,演示读取了数据,我认为您使用的自定义格式化程序没有任何问题:请参阅here:

    您可以将演示与年轻人进行比较,以了解差异。

    关于你的第二个问题(网格标题中的多行数据)我建议你看看here

    【讨论】:

    • 请注意,我已经编辑了我的问题以添加网格定义以及从服务器返回的 JSON。您的建议效果很好,不幸的是,我不允许我在两列中都使用通用格式化程序。最后,现在您可以看到 json 数据,您将看到它不是 DateTime 类型的数据。感谢您的支持。
    • 是的,我的第一个问题的代码中有一个小错字。对于第二个:太棒了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多