FC2ブログ

サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
2010/02/22

Ext JS-EditorGrid その3

前回の続きです。

合計の対象となるレコードの行番号を得る関数も用意しておきます。当然ですが、これは配列です。

function getTargetRowsToSum(gridData) {
// "kei":falseのrowを得る
var targetRowsToSum = [];
for (var i=0; i<gridData.getTotalCount(); i++) {
if (!gridData.getAt(i).get("kei")) {
targetRowsToSum.push(i);
}
}
return targetRowsToSum;
}

これで準備は大体はOKですが、一つ問題があります。

aftereditリスナでif (e.column == 2) と書いています。これは(ゼロから数えて)2列目の"個数"が編集対象というわけですが、合計行の2列目は編集できてはいけません。そこでセル編集前に発火する(Ext JSの日本語サイトでは"fire"の訳語として"発火"と書かれています。イベントが発生したという意味です)"beforeedit"に次のように書いておきます。

beforeedit: function(e) {
keiRow = getKeiRow(gridData); // 合計行を得る
if (e.row == keiRow) e.cancel = true;
}

こうしておけば合計行の2列目は編集モードにすらなりません。

あとは、aftereditを次のように書き換えます(赤字部分追加)。

afteredit: function(e) {
var tanka, kosu, price;
var keiRow; // '計'の行番号
var grid = Ext.getCmp('grid'); // grid object
var priceSum = 0;
var targetRowsToSum = [];
if (e.column == 2) {
tanka = e.record.data["tanka"];
kosu = e.record.data["kosu"];
if (isNaN(tanka) || isNaN(kosu)) price = "";
else price = Number(tanka) * Number(kosu);
e.record.data["price"] = String(price);
e.record.commit();

keiRow = getKeiRow(gridData); // 合計行を得る
if (keiRow != -1) {
targetRowsToSum = getTargetRowsToSum(gridData); // 合計対象行を得る
for (var i=0; i<targetRowsToSum.length; i++) {
price = getCellValue(grid, i, 3);
if (!isNaN(price)) priceSum += Number(price);
}
setCellValue(grid, keiRow, 3, priceSum);
}
}
}


これで所望の動作はするのですが、一つ不満があります。「合計行を得る」処理と「合計対象行を得る」処理は、編集が行われるたびに実行されるaftereditの外に出したいものです。編集のたびに実行する必要がないからです。ただ、外に出すとどうやってリスナに渡すかがわかりません(グローバル変数にはしたくない)。この辺がExt JSの難しいところです。

スポンサーサイト

コメント

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/382-1036d623

■  カレンダー

07 | 2019/08 | 09
- - - - 1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード