我想在我的dataGrid中有一個列,其中有複選框。與列創建網格我的代碼如下所示:動態生成的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結果是錯誤的,無論我是否選中複選框。
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)
{
}
}
}
我嘗試添加偵聽複選框如環建議,但當複選框的狀態改變(我檢查在調試器)不執行偵聽方法。我更新的第一代碼部分和上方加入下面的方法:
公共函數changeCheckboxState(事件:事件):無效 {
變種I:INT = event.currentTarget.id; if(checkboxValues [i] == true){ checkboxValues [i] == false;
} else { checkboxValues [i] == true;
} }
表格複選框值永遠不會改變(我將它全部設置爲false)並且永遠不會執行上述方法。
一般而言,您不必訪問ItemRenderer。您應該創建一個自定義的itemrenderer並將複選框的選擇綁定到基礎數據記錄的屬性。也許這可以幫助:http://stackoverflow.com/questions/6146006/spark-datagrid-with-checkbox-does-not-update-correctly/6146070#6146070 – RIAstar