在JQGrid中,是否可以在列格式化程序以外的分组摘要单元格中使用不同的格式化程序?

Alp*_*maz 10 jquery jqgrid

是否可以为数据行和摘要行使用不同的格式化程序?例如,我想将摘要信息(summaryType = count)添加到复选框格式化列,摘要值显示为选中复选框.有任何想法吗?

kind,

你可以从这里看到截图:

在此输入图像描述

Ole*_*leg 15

我发现你的问题非常有趣,因为我立即不知道答案.现在我抽出时间重新阅读jqGrid的分组模块的源代码并创建一个您需要的示例.

首先,我准备了演示,显示以下结果:

在此输入图像描述

如何看待摘要行有许多以不同方式格式化的元素:

在此输入图像描述

要在每个分组块的末尾都有摘要行,我们需要groupSummary: [true]groupingViewjqGrid 的参数中定义属性.然后我们需要为摘要行没有空单元格的所有列定义summaryType属性colModel.

例如,在最简单的情况下,我为列定义'amount'了属性summaryType: 'sum'.

对于'tax'summaryTpl另外定义的列:

summaryTpl: '<i>{0}</i>', summaryType: 'sum'
Run Code Online (Sandbox Code Playgroud)

结果,'tax'列的摘要包含斜体文本.

对于'total'我使用不同颜色的列取决于显示的值.值为grater的结果以绿色显示.其他值以红色显示.实现是摘要行的真正自定义格式化程序:

//formatter: 'number',
formatter: function (cellval, opts, rwdat, act) {
    if (opts.rowId === "") {
        if (cellval > 1000) {
            return '<span style="color:green">' +
                $.fn.fmatter('number', cellval, opts, rwdat, act) +
                '</span>';
        } else {
            return '<span style="color:red">' +
                $.fn.fmatter('number', cellval, opts, rwdat, act) +
                '</span>';
        }
    } else {
        return $.fn.fmatter('number', cellval, opts, rwdat, act);
    }
},
summaryType: 'sum'
Run Code Online (Sandbox Code Playgroud)

而不是formatter: 'number'我使用自定义格式化程序.我不想再实现formatter: 'number'一次了,所以我调用了预定义的'number'格式化程序$.fn.fmatter('number', cellval, opts, rwdat, act).

上面代码中最重要的部分是行

if (opts.rowId === "") {
Run Code Online (Sandbox Code Playgroud)

在格式化网格单元格期间,将调用自定义格式化程序,并将其opts.rowId初始化为行ID.仅在格式化摘要行的情况下,opts.rowId将为空字符串("").我使用这个事实来实现自定义格式.

在专栏中,'closed'我展示了另一个技巧.我使用summaryType定义的函数.可以使用它来将一些自定义汇总计算作为标准类型:"sum","min","max","count"和"avg".在演示中,我显示所有复选框的"计数"和所选复选框的"计数",并在摘要中显示结果.此外,摘要单元格还有一个复选框,如果选中该组中的至少一个复选框,则会选中该复选框.包含自定义格式化程序的相应代码如下:

formatter: function (cellval, opts, rwdat, act) {
    if (opts.rowId === "") {
        return '<span style="display:inline-block;top:-2px;position:relative;">' +
            cellval.checkedCount + ' of ' + cellval.totalCount + '</span>&nbsp;' +
            $.fn.fmatter('checkbox', cellval.max, opts, rwdat, act);
    } else {
        return $.fn.fmatter('checkbox', cellval, opts, rwdat, act);
    }
},
summaryType: function (val, name, record) {
    if (typeof (val) === "string") {
        val = {max: false, totalCount: 0, checkedCount: 0};
    }
    val.totalCount += 1;
    if (record[name]) {
        val.checkedCount += 1;
        val.max = true;
    }
    return val;
}
Run Code Online (Sandbox Code Playgroud)

我们需要保持我们计算树不同的值:totalCount,checkedCountmax.上面的代码显示,可以将初始字符串val参数更改为包含我们需要的所有信息的对象.在格式化摘要行期间,将调用自定义格式化程序,并将其cellval初始化为val我们之前创建的对象.我们可以保存任何自定义信息然后显示它.

我希望通过该演示,您可以创建所需的任何摘要分组行.


Eva*_*van 0

您使用自定义格式化程序吗?您可以做的是创建一个自定义格式化程序来根据输入显示不同的内容。我不确定您是否返回 true 或 false 作为您的输入,但这应该有效:

function checkboxFormatter(cellvalue,options,rowObject){
     if(typeof cellvalue == "number"){
          return cellvalue;
     }
     else if(cellvalue == "true"){
          return '<input type="checkbox" checked="checked" />';
     }
     else{
          return '<input type="checkbox" />';
     }
}
Run Code Online (Sandbox Code Playgroud)

如果您有疑问或者这与您的想法不同,请告诉我