3

次のように、この投稿で javascript で jqGrid 列を合計する良い方法を見つけました。

var total = $('#grid_id').jqGrid('getCol','col_name',false,'sum');

これは素晴らしいことですが、私が抱えている問題は、合計したい列に数字ではなく空白が含まれていることがありtotal、上記の例の変数がNaN.

空白がゼロのように機能するように、この関数を微調整する方法を知っている人はいますか?

ありがとう!

** アップデート **

Oleg がコメントで指摘したように、colModel でフォーマッタを使用する必要があります。formatter: 'number'をcolModelに入れると、すべての空白がゼロとして埋められ、機能します! このサンプル コードを参照してください。

$("#grid_id").jqGrid({
    url:'ajax_script.php?sql=' + sql1,
    height: 275,
    shrinkToFit: true,
    width: 800,
    datatype: 'xml',
    mtype: 'POST',
    colNames:["Customer","Job", "Sched QNTY Sell","Sched Total Sell"],
    colModel:[
        {name:"Customer",index:"Customer",width:"16"},
        {name:"JobNum",index:"JobNum",width:"16"},
        {name:"Sched Qnty Sell",index:"Sched Qnty Sell",width:"20", formatter: 'number'},
        {name:"Sched Total Sell",index:"Sched Total Sell",width:"20", formatter: 'number'}
    ],
    rowNum:10000,
    sortname: 'Customer',
    sortorder: 'asc',
    viewrecords: true,
    gridview: true,
    caption: 'Scheduled to Bill',
    footerrow : true,
    altRows : true,
    gridComplete: function(){
        $(this).jqGrid('footerData','set',{'Customer':'TOTALS:'});
        var colnames = $(this).jqGrid('getGridParam','colModel');
        for (var i = 2; i < colnames.length; i ++){
            var tot = $(this).jqGrid('getCol',colnames[i]['name'],false,'sum');
            var ob = [];
            ob[colnames[i]['name']] = tot;
            $(this).jqGrid('footerData','set',ob);
        }
    }
})
4

2 に答える 2

2

jqGrid は、最初にアンフォーマッター (列のフォーマッターを定義する場合) を使用して列のセルからデータを取得するかinnerHTML、HTML を取得してデコードします (文字 "<" は "<" の形式でエンコードできます)。次に、jqGrid を使用parseFloatしてデータを数値に変換します。最後に数字を合計します。

グリッドに入力する前にデータをトリミングするのが最善の方法だと思います。サーバー側でこれを行うことができない場合は、beforeProcessingコールバックを使用できます。

于 2012-05-15T14:42:38.917 に答える