Лучший способ реализовать «виртуальные столбцы» в jqGrid - это использование пользовательского форматера . Например
{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);
}}
Основным недостатком использования пользовательского форматера является то, что вы используете полное форматирование внутри. Вызов метода $.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;
}}
См. Демо здесь .