Как сделать столбец без базы данных в jqGrid? - PullRequest
4 голосов
/ 14 июля 2011

Я хотел бы рассчитать Всего на лету, не имея возможности сделать это в calctotal.php.По сути это расчетный столбец.Я думал об использовании какого-либо события, например afterInsertRow , но даже без какого-либо события он перемещает данные столбца на единицу, потому что файл XML содержит только 3 столбца вместо четырех.Так что мой столбец Total теперь содержит данные из Notes Я добавил поддельный столбец в файл php, но зачем мне это делать?Спасибо

url:'./calctotal',
datatype: 'xml',
mtype: 'GET',
colNames:['Inv No', 'Amount','Tax','Total'm 'Notes'],
colModel :[ 
  {name:'invid', index:'invid', width:55}, 
  {name:'amount', editable: false, index:'amount', width:80, align:'right'}, 
  {name:'tax', index:'tax', width:80, align:'right'}, 
  **{name:'total', index:'total', width:80, align:'right'},**
  {name:'notes', index:'notes', width:80, align:'left'}

],

1 Ответ

6 голосов
/ 14 июля 2011

Лучший способ реализовать «виртуальные столбцы» в 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;
 }}

См. Демо здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...