jEasyUI 列の操作

jEasyUI データグリッドの列演算:動的なデータ計算と表示

jEasyUI データグリッドの列演算:動的なデータ計算と表示

この記事では、jEasyUI データグリッド(DataGrid)の列演算機能について詳しく解説します。 フッターに集計行を表示する「footerfooter」属性の使い方、計算ロジックのカスタマイズ方法、 計算結果のフォーマット方法などを説明します。

フッターの footerfooter 属性を使って集計行を表示する

footerfooter 属性を使うと、データグリッドの下部に集計情報を表示するための行を追加できます。


<table id="dg" title="売上データ" style="width:700px;height:250px"
           data-options="
               url:'data.json',
               singleSelect:true,
               footerfooter:#ff: {total:'合計'}
           ">
       <thead>
           <tr>
               <th data-options="field:'product',width:100">商品名</th>
               <th data-options="field:'price',width:80,align:'right'">価格</th>
               <th data-options="field:'quantity',width:80,align:'right'">数量</th>
               <th data-options="field:'amount',width:80,align:'right',formatter:formatCurrency">金額</th>
           </tr>
       </thead>
</table>
<div id="ff">
    <div style="width:200px;float:left;">合計金額:</div>
    <div style="float:right;padding-right:10px;" data-options="total:0">0</div>
</div>

列演算ロジックのカスタマイズ

JavaScript 関数を使用して、列演算ロジックをカスタマイズできます。

例えば、合計と平均を計算するには、次のようにします。


var data = $('#dg').datagrid('getData').rows;
var total = 0;
for (var i = 0; i < data.length; i++) {
    total += parseFloat(data[i].amount);
}
var avg = total / data.length;

// 合計行を更新
$('#ff').find('[data-options*=total]').text(formatCurrency(total));
// 平均値を表示
$('#ff').append('<div style="float:right;padding-right:10px;">平均: ' + formatCurrency(avg) + '</div>');

計算結果のフォーマット

formatter 関数を使用して、計算結果をフォーマットできます。

例えば、数値を通貨形式にフォーマットするには、次のようにします。


function formatCurrency(value) {
    return '¥' + parseFloat(value).toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, '$1,');
}

注意事項

  • 特に数値計算を行う場合は、データ型に注意してください。
  • 実際の要件に応じて、適切な計算ロジックとフォーマット方法を選択する必要があります。
  • ループ内でDOM操作を行うことは避けて、パフォーマンスを最適化してください。

参考文献

Q&A

Q1: 列の合計値を動的に更新するにはどうすればよいですか?

A1: データグリッドのデータを変更した後、上記のカスタム列演算ロジックを再実行して、合計行を更新する必要があります。

Q2: 複数の集計行を表示できますか?

A2: はい、footerfooter属性で複数のdiv要素を指定することで、複数の集計行を表示できます。

Q3: 列演算のパフォーマンスを向上させるにはどうすればよいですか?

A3: ループ内でのDOM操作を避け、計算に必要なデータのみを抽出するようにしてください。また、jEasyUIのデータグリッドのイベントを利用して、効率的に計算を実行することもできます。