Как я могу рассчитать общий столбец на стороне клиента, используя jqGrid? - PullRequest
0 голосов
/ 24 июня 2011

Я пытаюсь реализовать простую электронную таблицу, используя jqGrid. Это столбцы сетки:

ID | Name | LastName | Data1 | Data2 | Total (Всего будет Data1 + Data2)

Мой код JavaScript выглядит так:

$(function() {    
 var lastsel;

        jQuery("#my_excel_grid").jqGrid({

            url:'data_excel.php',
            datatype: "json",
            colNames:['id','name', 'lastname', 'data1','data2','total'],
            colModel:[
                {name:'id',index:'id', width:55, sortable:false},
                {name:'name',index:'name', width:90},
                {name:'lastname',index:'lastname', width:100},
                {name:'data1',index:'data1', width:80, align:"right", editable:true},
                {name:'data2',index:'data2', width:80, align:"right", editable:true},       
                {name:'total',index:'total', width:80,align:"right",
                        formatter: function (cellvalue, options, rowObject) 
                             {
                                 // Harcoded index won't work in the real life excel grid
                                 //        since the columns will be populated dynamically
                                 return parseInt(rowObject[3]) + parseInt(rowObject[4]);
                              }
                },      
            ],
            rowNum:10,
            rowList:[10,20,30],
            pager: '#my_excel_pager',
            sortname: 'id',
            sortorder: "desc",
            caption:"Excel",          
            editurl:"data_excel.php?op=edit",          

            onSelectRow: function(id) {
                    if (id && id !== lastsel) {
                      jQuery('#my_excel_grid').restoreRow(lastsel);
                      jQuery('#my_excel_grid').editRow(id, true);
                      lastsel = id;
                    }
                  },

             beforeSubmitCell: function(rowid, celname, value, iRow, iCol) { alert("beforeSubmitCell"); },
             afterSaveCell: function (rowid, celname, value, iRow, iCol) { alert("afterSaveCell"); },

        }); });

У меня проблема в том, что beforeSubmitCell и afterSaveCell не были вызваны (я не получаю сообщения с предупреждениями), поэтому я не могу записать новое значение в столбце Итого. Кстати, URL editurl является фиктивным, он ничего не возвращает (я также попытался установить 'clientArray' безуспешно).

Итак, как рассчитать столбец Всего на стороне клиента?

К вашему сведению: идея заключается в том, чтобы сохранить сетку, используя внешнюю кнопку *1021* , а также динамически заполнить столбцы, как показано здесь и здесь

1 Ответ

1 голос
/ 24 июня 2011

jqGrid имеет три режима редактирования , которые вы можете использовать: встроенное редактирование , редактирование формы и редактирование ячейки . Если вы используете editRow и restoreRow , это означает, что вы используете встроенный режим редактирования . События afterSaveCell и beforeSubmitCell используются только в случае режима редактирования ячейки.

Итак, что вам нужно сделать, это

  1. для удаления неиспользуемых событий beforeSubmitCell и beforeSubmitCell из определения jqGrid.
  2. для добавления дополнительных параметров при вызове editRow. Вам необходимо использовать параметр aftersavefunc . Вместо jQuery('#my_excel_grid').editRow(id, true); вы можете использовать jQuery(this).jqGrid('editRow', id, true, null, null, 'clientArray', {}, function(rowid,issuccess){alert(rowid);});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...