在JQGrid中,是否可以在列格式化程序以外的分组摘要单元格中使用不同的格式化程序?
是否可以为数据行和摘要行使用不同的格式化程序? 例如,我想将摘要信息(summaryType = count)添加到复选框格式的列,摘要值显示为选中的复选框。 有任何想法吗?
种,Alper
你可以从这里看到截图:
我发现你的问题非常有趣,因为我立即不知道答案。 现在我抽出时间重新阅读jqGrid的分组模块的源代码并创建一个您需要的示例。
首先,我准备了演示 ,显示以下结果:
如何看待摘要行有许多以不同方式格式化的元素:
要在每个分组块的末尾都有摘要行,我们需要在groupSummary: [true]
的groupingView
参数中定义groupSummary: [true]
属性。 然后我们需要为colModel
中的所有列定义summaryType属性,其中摘要行不是空单元格。
例如,在最简单的情况下,我为列'amount'
定义了属性summaryType: 'sum'
。
对于'tax'
栏,我另外定义了summaryTpl
:
summaryTpl: '{0}', summaryType: 'sum'
因此, 'tax'
列的摘要包含斜体文本。
对于'total'
列,我使用不同的颜色取决于显示的值。 值为grater的结果以绿色显示。 其他值以红色显示。 实现是摘要行的真正自定义格式化程序:
//formatter: 'number', formatter: function (cellval, opts, rwdat, act) { if (opts.rowId === "") { if (cellval > 1000) { return '' + $.fn.fmatter('number', cellval, opts, rwdat, act) + ''; } else { return '' + $.fn.fmatter('number', cellval, opts, rwdat, act) + ''; } } else { return $.fn.fmatter('number', cellval, opts, rwdat, act); } }, summaryType: 'sum'
而不是formatter: 'number'
我使用自定义格式化程序。 我不想再实现formatter: 'number'
,所以我调用了预定义的’number’格式化程序,关于$.fn.fmatter('number', cellval, opts, rwdat, act)
。
上面代码中最重要的部分就是这一行
if (opts.rowId === "") {
在格式化网格单元格期间,将调用自定义格式化程序,并将opts.rowId
初始化为行ID。 仅在格式化摘要行的情况下, opts.rowId
将为空字符串( ""
)。 我使用这个事实来实现自定义格式。
在'closed'
栏中,我展示了另一个技巧。 我使用定义为函数的summaryType
。 可以使用它来将一些自定义汇总计算作为标准类型:“sum”,“min”,“max”,“count”和“avg”。 在演示中,我显示所有复选框的“计数”和所选复选框的“计数”,并在摘要中显示结果。 此外,摘要单元格还具有复选框,如果选中组中的至少一个复选框,则检查该复选框。 包含自定义格式化程序的相应代码如下:
formatter: function (cellval, opts, rwdat, act) { if (opts.rowId === "") { return '' + cellval.checkedCount + ' of ' + cellval.totalCount + ' ' + $.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; }
我们需要保持树计算的不同值: totalCount
, checkedCount
和max
。 上面的代码显示,可以将初始字符串val
参数更改为包含我们需要的所有信息的对象。 在格式化摘要行期间,将调用自定义格式化程序,并将cellval
初始化为我们之前创建的val
对象。 我们可以保存任何自定义信息然后显示它。
我希望通过演示,您将能够创建所需的任何摘要分组行。
你在使用自定义格式化程序吗? 你可以做的是使自定义格式化程序根据输入显示不同的东西。 我不确定你是否输入真或假作为你的输入,但有些谎言这应该工作:
function checkboxFormatter(cellvalue,options,rowObject){ if(typeof cellvalue == "number"){ return cellvalue; } else if(cellvalue == "true"){ return ''; } else{ return ''; } }
如果您有疑问,或者如果这与您的想法不同,请告诉我