2013-01-02 50 views
0

我想在我的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)並且永遠不會執行上述方法。

+1

一般而言,您不必訪問ItemRenderer。您應該創建一個自定義的itemrenderer並將複選框的選擇綁定到基礎數據記錄的屬性。也許這可以幫助:http://stackoverflow.com/questions/6146006/spark-datagrid-with-checkbox-does-not-update-correctly/6146070#6146070 – RIAstar

回答

1

你應該聽取Event.CHANGE而不是鼠標點擊本身(這種方式你知道你在框架更新selected後得到的事件)。

從那裏,你應該能夠得到複選框的所有者(作爲ItemRenderer),並檢索該單元格的數據。

+0

我提出了我的問題,但有添加事件偵聽器的問題。 – Kamil

相關問題