0

チェックボックスを含む dataGrid に列を作成したいと考えています。列でグリッドを作成する私のコードは次のようになります。

var dataGrid:DataGrid=new DataGrid();
var preparedColumns:Array=[];
preparedColumns.push(new DataGridColumn("DepCode"));
var checkboxColumn:DataGridColumn=new DataGridColumn("AddSegment");
checkboxColumn.itemRenderer=new ClassFactory(CheckBox);
checkboxColumn.editable=true;
preparedColumns.push(checkboxColumn);

for (var i:int=0; i < event.result.request.out.segments.segment.length; i++)
{
    var segment:Object=event.result.request.out.segments.segment[i];
    var addSegmentCheckbox:CheckBox=new CheckBox();
    preparedValues.addItem({DepCode: segment.departureCode, AddSegment: addSegmentCheckbox});
    addSegmentCheckbox.id = ""+i;
    addSegmentCheckbox.addEventListener(Event.CHANGE, changeCheckboxState);
    checkboxValues[i] = false;
}
dataGrid.columns=preparedColumns;
dataGrid.dataProvider=preparedValues;

これは機能しますが、少なくとも私が望むものをレンダリングしますが、ユーザーが特定の行でチェックボックスを選択したかどうかを読み取る方法がわかりません。チェックボックスに関数 onChange が追加されていることがよくありますが、ファクトリを使用するときにそれを行う方法がわかりません (私が見つけたほとんどの例では、コードで itemRenderer を作成するのではなく、タグを使用して作成します)。

このようなデータを読み取ろうとしましたが、チェックボックスをオンにしたかどうかに関係なく、checkbox.selected が false になります。

public function OKButtonClick(event:MouseEvent):void
{
    for (var i:int=0; i < preparedValues.length; i++)
    {
        var row:Object=preparedValues[i];
        var checkbox:CheckBox=row.AddSegment;
        if (checkbox.selected == true)
        {           
        }
    }
}

ループで提案されているようにチェックボックスのリスナーを追加しようとしましたが、チェックボックスの状態が変化したときにリスナーメソッドが実行されません(デバッガーで確認しました)。上記の最初のコード部分を更新し、次のメソッドを追加しました。

public function changeCheckboxState(event:Event):void {
var i:int = event.currentTarget.id; if (checkboxValues[i] == true) {checkboxValues[i] == false;
} そうでなければ{checkboxValues [i] == true;
} }

テーブルのcheckboxValuesは決して変更されず(最初にすべてfalseに設定しました)、上記のメソッドは実行されません。

4

1 に答える 1

1

マウス クリック自体の代わりにリッスンする必要がありEvent.CHANGEます (フレームワークが更新された後にイベントを取得していることがわかりますselected)。

ItemRendererそこから、チェックボックスの所有者を (として) 取得し、そのセルのデータを取得できるはずです。

于 2013-01-02T16:37:14.953 に答える