JQGrid分组GroupText格式和修改

时间:2012-05-29 16:27:09

标签: jqgrid jqgrid-asp.net jqgrid-php jqgrid-formatter

我有一个实现分组的网格,但我想扩展显示在groupText:区域中的细节。理想情况下,我可以获取有关该分组的数据,并在该组行中显示组名({0}默认值)。

换句话说,我想要实现的是一种不仅可以显示组名,还可以显示网格的JSON提要中包含的其他一些数据项的方法。

对于任何能够实现这一目标的人来说,我的搜索似乎很短暂,但我希望有人能够阐明扩展这一设置并提供对此区域进行格式化的途径。

1 个答案:

答案 0 :(得分:8)

我发现你的问题很有趣,但实施并不简单。在the answer我之前展示了如何在分组的摘要行中使用自定义格式化程序。

the demo中,您可以看到如何实现分组文本的自定义格式。演示显示以下内容:

enter image description here

实现仅包括the custom formatter的实现,它可以用于两个目的:格式化相应列的内容,以及在按列分组的情况下格式化分组文本。代码有点棘手,但我希望所有人都能遵循它。代码使用输入参数的差异来定义是否将调用格式化程序来格式化列内容或格式化分组文本。

获取像“(test4,test7)”这样的文本的代码的一部分在使用大量行的情况下效果不是很好,但是它有效。

以下是“日期”列的格式化程序代码,通常与预定义的formatter: 'date'一起使用。我在代码中调用了原始的Date-formatter,但用于分组文本更复杂的代码:

formatter: function (cellval, opts, rowObject, action) {
    var fullOpts = $.extend({}, $.jgrid.formatter.date, opts),
        formattedDate = $.fmatter.util.DateFormat('Y-m-d', cellval, 'd-M-Y', fullOpts),
        groupIdPrefix = opts.gid + "ghead_",
        groupIdPrefixLength = groupIdPrefix.length,
        month = Number(cellval.split('-')[1]), // input format 'Y-m-d'
        names = [], data, i, l, item;

    // test wether opts.rowId start with opts.gid + "ghead_" and integer
    // and rowObject is the array and action is undefined.

    if (opts.rowId.substr(0, groupIdPrefixLength) === groupIdPrefix && typeof action === "undefined") {
        // custom formating of the group header
        // we just simulate some login by testing of the month > 9

        // the next code fragment is not effective, but it can be used
        // in case of not so large number of groups and the local data
        data = $(this).jqGrid("getGridParam", "data");
        for (i = 0, l = data.length; i < l; i++) {
            item = data[i];
            if (item.invdate === cellval) {
                names.push(item.name);
            }
        }

        return (month > 9 ? ('<span class="ui-icon ui-icon-alert" style="float: left;"></span>' +
            '<span style="color:tomato; margin-left: 5px;">') : "<span>") +
            formattedDate + ' (' + names.join() + ')</span>'
    }
    return formattedDate;
}

更新:演示的固定版本为here。它使用$.fn.fmatter而不是当前从jqGrid方法$.fmatter.util.DateFormat中删除。