DataGrid コンポーネントのChangeハンドラーについて
WinXP、Flash8Proにてオーサリングしております。
質問です。
DataGridコンポーネントにおいて、
エクセルの様に表を作り、そこに商品や金額、数量の
3つのColumnを作り、
合計金額と合計個数は
別途、ダイナミックTEXTフィールドに
自動計算後表示させるといった内容を構築しております。
それでですが、
Flash再生時に、
DataGridコンポーネントに一度読み込まれたDataにおいて、
数量のcolumnの値が手動で変更された時に
Changeハンドラーがトリガーし、
合計金額と数量合計を再計算後、
ダイナミックテキストフィールドに
再表示させたいのですが、
設定としては、DataGridの数量のColumnだけが編集可能としているのですが、
Flash再生時に
この部分の数値を手動で変更すると
変更前の値と変更した値を
返り値として取得するにはどうしたら良いのでしょうか?
また、その際に、価格*変更された数量=
といった再計算も必要となるのですが
動的に変更された数量から、その列の"価格"のIndexを
取得し、再計算させる方法もわかりません。
何か方法などありましたら、教えて頂きたいです。
どうぞ宜しくお願い致します。
FlashヘルプのDataGridコンポーネントを見ても、
解決できませんでした。
どうぞ宜しくお願い致します。
*DataSetを使わないのは、Flash6から対応にしたいためです。
回答(1件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.1ベストアンサー20pt
コンナ感じでしょうか?
グリッドのインスタンス名はmyGridです。
//-----------------------------------------------------------------
var data_array = new Array();
data_array[0] = {商品:"なし", 金額:120, 個数:7};
data_array[1] = {商品:"りんご", 金額:100, 個数:4};
data_array[2] = {商品:"メロン", 金額:1200, 個数:4};
data_array[3] = {商品:"さくらんぼ", 金額:20, 個数:20};
data_array[4] = {商品:"バナナ", 金額:30, 個数:10};
myListener = new Object();
var oldval = "";
var newval = "";
myGrid.dataProvider = data_array;
myGrid.editable = true;
//フォーカスインのとき編集前値取得
myListener.cellFocusIn = function(event) {
oldval = myGrid.getItemAt(event.itemIndex)[myGrid.columnNames[event.columnIndex]];
trace(oldval);
};
//フォーカスアウトのとき編集前後の値を比較
myListener.cellFocusOut = function(event) {
newval = myGrid.getItemAt(event.itemIndex)[myGrid.columnNames[event.columnIndex]];
//値が変わってるとき合計を再計算
if (newval != oldval) {
sum_txt.text = CalcSum();
}
};
//リスナー追加
myGrid.addEventListener("cellFocusIn", myListener);
myGrid.addEventListener("cellFocusOut", myListener);
//値計算関数
function CalcSum():Number {
var sum = 0;
for (var i = 0; i<myGrid.length; i++) {
sum += myGrid.getItemAt(i).金額*myGrid.getItemAt(i).個数;
}
return sum;
}
//初期表示時の合計表示
sum_txt.text = CalcSum();
この回答への補足
import mx.controls.gridclasses.DataGridColumn;
var my_dg:mx.controls.DataGrid;
//my_dg.setSize(262, 200);
// 列をグリッドに追加する。
var itemname:DataGridColumn = new DataGridColumn("商品");
//var itemname:DataGridColumn = new DataGridColumn("article");
itemname.width = 130;
itemname.headerText = "商品名";
my_dg.addColumn(itemname);
// 2 番目の列をグリッドに追加する。
//var itemprice:DataGridColumn = new DataGridColumn("price");
var itemprice:DataGridColumn = new DataGridColumn("金額");
itemprice.width = 50;
itemprice.headerText = "価格";
my_dg.addColumn(itemprice);
// 3 番目の列をグリッドに追加する。
//var itemamount:DataGridColumn = new DataGridColumn("amount");
var itemamount:DataGridColumn = new DataGridColumn("個数");
itemamount.width = 36;
itemamount.headerText = "数量";
my_dg.addColumn(itemamount);
my_dg.getColumnAt(0).editable=false;
my_dg.getColumnAt(1).editable=false;
my_dg.getColumnAt(2).editable=true;
いつも有難う御座います。
私のスクリプトに教えて頂いたスクリプトを追加してみましたが
Dataが読み込まれません。
私が
myGrid.dataProvider = data_array;
の仕組みが理解できていないためだと思いますが
どのように変更すれば良いのでしょうか?
どうぞ宜しくお願い致しますm(_ _)m
この回答へのお礼
いつも有難う御座います!
DataGridは、getItemAtが使えないので
以下のように変更すると動きました。
sum += myGrid.DataProvider.getItemAt(i).金額*myGrid.DataProvider.getItemAt(i).個数;
感無量です。
調べつくしていたので、今回は無理だろうと
諦めていました。
本当に感謝しています。
有り難う御座いました!
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示












