在 jqGrid 中实现“虚拟列”的最糟糕的方法是使用custom formatter。例如
{name:'amount',index:'amount',width:70, formatter:'currency', align:'right'},
{name:'tax',index:'tax',width:50, formatter:'currency', align:'right'},
{name:'total',index:'total',width:60, align:'right',
formatter:function(cellvalue, options, rowObject) {
var amount = parseInt(rowObject.amount,10),
tax = parseInt(rowObject.tax,10);
return $.fmatter.util.NumberFormat(amount+tax,$.jgrid.formatter.currency);
}}
使用自定义格式化程序的主要缺点是您在内部使用 make full 格式化。方法$.fmatter.util.NumberFormat的调用可以帮助我们简化工作。
如果您使用远程数据类型(datatype: 'xml' 或 datatype: 'json'),则服务器负责数据排序。因此,服务器不仅应该能够对“真实”数据字段的数据进行排序,还应该能够对“虚拟”列的数据进行排序。我们在上面使用index:'total'。因此,如果用户单击“总计”列的标题,将发送到服务器的sidx 参数将为total。所以服务器应该能够产生按total排序的数据。
如果你使用本地数据,你可以使用sorttype作为函数来实现排序:
{name:'amount',index:'amount',width:70, formatter:'currency', sorttype:'number',
align:'right'},
{name:'tax',index:'tax',width:50, formatter:'currency', sorttype:'number',
align:'right'},
{name:'total',index:'total',width:60, align:'right',
formatter:function(cellvalue, options, rowObject) {
var amount = parseInt(rowObject.amount,10),
tax = parseInt(rowObject.tax,10);
return $.fmatter.util.NumberFormat(amount+tax,$.jgrid.formatter.currency);
},
sorttype:function(cellvalue, rowObject) {// like for sorttype:'number',
var amount = parseInt(rowObject.amount,10),
tax = parseInt(rowObject.tax,10);
return amount+tax;
}}
查看演示 here。