【问题标题】:How can I calculate a Total column on client side using jqGrid?如何使用 jqGrid 在客户端计算 Total 列?
【发布时间】:2011-06-24 14:02:28
【问题描述】:

我正在尝试使用 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"); },

        }); });

我遇到的问题是 beforeSubmitCellafterSaveCell 没有被调用(我没有收到警报消息),所以我无法编写Total 列中的新值。顺便说一下,editurl url 是虚拟的,它没有返回任何内容(我也尝试设置 'clientArray' 没有成功)。

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

仅供参考:想法是使用external "Save" button 保存网格,并动态填充列,如herehere 所示

【问题讨论】:

    标签: jqgrid


    【解决方案1】:

    jqGrid 有三个editing modes,您可以使用它们:inline editingform editingcell editing。如果您使用editRowrestoreRow,则意味着您使用the inline editing modeafterSaveCellbeforeSubmitCell 事件仅用于单元格编辑模式。

    所以你需要做的是

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

    【讨论】:

    • 谢谢,成功了!顺便说一句,你在 1 中重复了 beforeSubmitCell
    • @epzee:不客气!应删除的事件名称为afterSaveCellbeforeSubmitCell(均来自单元格编辑)
    猜你喜欢
    • 2011-11-24
    • 1970-01-01
    • 2021-01-14
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2017-06-18
    相关资源
    最近更新 更多