如何使用jqGrid在客户端计算Total列?

时间:2011-06-24 14:02:29

标签: jqgrid

我正在尝试使用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 (我没有收到警报消息),所以我不能写“总计”列中的新值。顺便说一下, editurl url是虚拟的,它没有返回任何东西(我也试过设置'clientArray'没有成功)。

那么,如何计算客户端的Total列?

仅供参考:我们的想法是使用external "Save" button保存网格,并按照herehere

动态填充列

1 个答案:

答案 0 :(得分:1)

jqGrid有三个editing modes您可以使用:inline editingform editingcell editing。如果您使用editRowrestoreRow,则表示您使用the inline editing modeafterSaveCellbeforeSubmitCell事件仅在单元格编辑模式下使用。

所以你需要做的是

  1. 从jqGrid定义中删除未使用的beforeSubmitCellbeforeSubmitCell事件。
  2. 在editRow调用中添加其他参数。您需要使用aftersavefunc参数。您可以使用jQuery('#my_excel_grid').editRow(id, true);
  3. 代替jQuery(this).jqGrid('editRow', id, true, null, null, 'clientArray', {}, function(rowid,issuccess){alert(rowid);});