我希望在我的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)
{
}
}
}
我尝试按照循环中的建议为复选框添加一个监听器,但是当复选框状态发生变化时我不会执行监听器方法(我在调试器中检查过它)。我更新了上面的第一个代码部分并添加了以下方法:
public function changeCheckboxState(event:Event):void
{
var i:int = event.currentTarget.id;
if(checkboxValues [i] == true){
checkboxValues [i] == false;
} else {
checkboxValues [i] == true;
}
}
表checkboxValues永远不会改变(我在开始时将其全部设置为false)并且永远不会执行上述方法。
答案 0 :(得分:1)
您应该听取Event.CHANGE
而不是鼠标点击本身(这样您就知道在框架更新selected
之后您正在获取该事件。)
从那里,你应该能够获得复选框的所有者(作为ItemRenderer
),并检索该单元格的数据。