JQGrid分组GroupText格式和修改

Mar*_*ark 5 jqgrid jqgrid-php jqgrid-asp.net jqgrid-formatter

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

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

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

Ole*_*leg 8

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

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

在此输入图像描述

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

获取像"(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;
}
Run Code Online (Sandbox Code Playgroud)

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

  • @MarkR:我很高兴看到我的旧答案对你也有帮助.关于你最后一个问题.如果使用基于服务器的数据而不使用`loadonce:true`,并且如果不使用TreeGrid,则不会填充本地`data`参数.在这种情况下,您无法访问完整的服务器响应.只有当网格已经填满并且不在自定义格式化程序内部时,`getRowData`才能帮助你.作为解决方法,您可以使用`beforeProcessing`回调来保存从外部作用域中定义的变量中的服务器返回的`data`.然后,您将能够访问我上面描述的数据. (2认同)