jqgrid根据其他列单元格值计算列单元格总数

jqgrid根据其他列单元格值计算列单元格总数,jqgrid,Jqgrid,在使用jqgrid的setFooterData函数计算总金额后,如中所示,这是我的网格和函数: <script type="text/javascript"> function calculateTotal(grid_ , column_id_) { var _total_amount = 0; var i = getColumnIndexByName(grid_ , column_id_); // TO ADD

在使用jqgrid的setFooterData函数计算总金额后,如中所示,这是我的网格和函数:

<script type="text/javascript">

    function calculateTotal(grid_ , column_id_)
    {
        var _total_amount = 0;
        var i = getColumnIndexByName(grid_ , column_id_); 

        // TO ADD - calculate only if row "status" cell = "1:Confirmed"
        $("tbody > tr.jqgrow > td:nth-child("+(i+1)+")" , grid_[0]).each(function()
        {
            _total_amount += Number(getTextFromCell(this));
        });

        return _total_amount;
    }

    function getColumnIndexByName(grid_ , column_id_)
    {
        var cm = grid_.jqGrid('getGridParam','colModel');
        for (var i=0,l=cm.length; i<l; i++)
        {
            if (cm[i].name===column_id_)
            {
                return i; // return the index
            }
        }
        return -1;
    }

    function getTextFromCell(cellNode)
    {
        return cellNode.childNodes[0].nodeName === "INPUT"?
                  cellNode.childNodes[0].value:
                  cellNode.textContent || cellNode.innerText;
    }

    $(document).ready(function () {

        var grid = $("#list"),lastSel;

        grid.jqGrid({
            url:'url',
            datatype: "xml",
            loadonce:true ,
            async: false,
            colNames: ['Inv No', 'Name' , 'Amount' , 'Status'],
            colModel: [
                { name: 'id', index: 'id', width: 65, sorttype: 'int', hidden: true },
                { name: 'name', index: 'name', editable: true, width: 90, sortable: false },
                { name: 'amount', index: 'amount', editable: true, width: 70, formatter: 'number', align: 'right', sortable: false },
                {name:'status',index:'status', width:90, sorttype:"int" , editable:true,
                  edittype:"select", formatter:'select',
                  editoptions:
                  {
                     value:"1:Confirmed ;2:Open ; 3:Rejected" ,
                     dataInit: function(elem)
                     {
                        $(elem).width(90);
                     }
                  }
                },
            ],
            rowNum: 1000,
            pager: '#pager',
            viewrecords: true,
            sortorder: "desc",                
            height: "100%",                
            footerrow:true,
            xmlReader: {
                                          root:"rows",
                                          row:"row",
                                          repeatitems:false
                                       },
            shrinkToFit: false,
            beforeSelectRow: function(row_id_, e)
            {
            },
            onSelectRow: function(id)
            {
                 grid.jqGrid('saveRow' , lastSel , false, 'clientArray');
                 grid.editRow(id , false);
                 lastSel=id;
            },
            loadComplete:function()
            {
                grid.jqGrid('footerData' , 'set' , {name:'TOTAL:' , amount: calculateTotal(grid , 'amount')});
            }
        });            
    });    
</script>

函数calculateTotal(网格、列id)
{
var _总金额=0;
var i=getColumnIndexByName(网格、列id);
//添加-仅当行“状态”单元格=“1:已确认”时计算
$(“tbody>tr.jqgrow>td:n子项(“+(i+1)+”),网格[0])。每个(函数()
{
_总金额+=数量(getTextFromCell(this));
});
返回-总金额;
}
函数getColumnIndexByName(网格、列id)
{
var cm=grid.jqGrid('getGridParam','colModel');
对于(var i=0,l=cm.length;i我使用另一种方法枚举网格中的单元格(请参阅)

在演示中,我将
getTextFromCell
calculateTotal
函数的代码修改为:

var getTextFromCell = function(cellNode) {
        if (cellNode.childNodes[0].nodeName.toUpperCase() === "SELECT") {
            var selOptions = $("option:selected", cellNode);
            if (selOptions.length>0) {
                return selOptions.text();
            }
        }
        return cellNode.childNodes[0].nodeName.toUpperCase() === "INPUT"?
               cellNode.childNodes[0].value:
               cellNode.textContent || cellNode.innerText;
    },
    calculateTotal = function() {
        var totalAmount = 0,
            iAmount=getColumnIndexByName(grid,'amount'),
            iStatus=getColumnIndexByName(grid,'status');
        var i=0, rows = grid[0].rows, rowsCount = rows.length, row, status;

        for(;i<rowsCount;i++) {
            row = rows[i];
            if (row.className.indexOf('jqgrow') !== -1) {
                status = getTextFromCell(row.cells[iStatus]);
                if (status === "Confirmed") {
                    totalAmount += Number(getTextFromCell(row.cells[iAmount]));
                }
            }
        }

        grid.jqGrid('footerData','set',{name:'TOTAL Confirmed',amount:totalAmount});
    };
var getTextFromCell=函数(cellNode){
if(cellNode.childNodes[0].nodeName.toUpperCase()=“选择”){
var selOptions=$(“选项:选定”,cellNode);
如果(selOptions.length>0){
返回selpoptions.text();
}
}
返回cellNode.childNodes[0].nodeName.toUpperCase()=“输入”?
cellNode.childNodes[0]。值:
cellNode.textContent | | cellNode.innerText;
},
calculateTotal=函数(){
var totalAmount=0,
iAmount=getColumnIndexByName(网格,'amount'),
iStatus=getColumnIndexByName(网格,“状态”);
变量i=0,行=网格[0]。行,行=行。长度,行,状态;

对于(;iIs,有一种方法可以获取值1而不是“已确认”?@user590586:我想您应该使用
selpoptions.val()
而不是
selpoptions.text()
。我忘了告诉您代码中的一些错误。您应该注意空格和新行。例如
value:“1:已确认;2:打开;3:拒绝”
将被解释为select,树值为:“1”、“2”和“3”(!!!),相应的数据为“已确认”、“打开”和“已拒绝”。此外,后面的逗号类似“},]”在
colModel
定义的末尾是语法错误。独立于您典型的代码格式,我建议您使用样式,因为JavaScript代码中可能插入“;”。