jquery – 在JQGrid中,是否可以使用不同的格式化器对列格式化程序以外的汇总单元格进行分组?

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

种类,阿尔卑斯
你可以看到截图从here

解决方法

我发现你的问题很有趣,因为我马上不知道答案.现在我找到了时间来重读jqgrid的分组模块的源代码,并创建一个你需要的例子.

首先我准备了the demo显示以下结果:

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

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

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

对于列“税”我另外定义了summaryTpl:

summaryTpl: '<i>{0}</i>',summaryType: 'sum'

因此,“税”列的摘要包含斜体文本.

对于“总计”列,我使用不同的颜色取决于显示的值.具有1000的值的结果以绿色显示.其他值以红色显示.实现是摘要行的真正的自定义格式化程序:

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

而不是formatter:’number’我使用自定义格式化程序.我不想再次执行格式化程序:’number’,所以我以$.fn.fmatter(‘number’,act)的形式调用了预定义的’number’格式化程序.

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

if (opts.rowId === "") {

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

在“封闭”专栏中,我再显示一个伎俩.我使用summaryType定义为一个函数.可以使用它来作为标准类型的一些自定义汇总计算:“sum”,“min”,“max”,“count”和“avg”.在演示中,我显示所有的“count”和所选复选框的“count”,并在摘要显示结果.此外,摘要单元格还有一个复选框,检查该组中是否至少有一个复选框.包含自定义格式化程序的相应代码如下:

formatter: function (cellval,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,act);
    } else {
        return $.fn.fmatter('checkBox',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;
}

我们需要保存树不同的值,我们计算:totalCount,checkedCount和max.上面的代码显示可以将初始字符串val参数更改为保存所需信息的对象.在格式化摘要行期间,将使用初始化为先前创建的val对象的单元格来调用自定义格式化程序.我们可以保存任何自定义信息,然后显示它.

我希望对于演示,您将能够创建任何您需要的摘要分组行.

相关文章

页面搜索关键词突出 // 页面搜索关键词突出 $(function () {...
jQuery实时显示日期、时间 html: &lt;span id=&quot...
jQuery 添加水印 &lt;script src=&quot;../../../.....
中文:Sys.WebForms.PageRequestManagerParserErrorExceptio...
1. 用Response.Write方法 代码如下: Response.Write(&q...
Jquery实现按钮点击遮罩加载,处理完后恢复 思路: 1.点击按...