我想在我的 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(event:Event):void {
var i:int = event.currentTarget.id; if (checkboxValues[i] == true) { checkboxValues[i] == false;
} else { checkboxValues[i] == true;
} }
表 checkboxValues 永远不会改变(我一开始就将其全部设置为 false),并且永远不会执行上述方法。