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 都是错误的。

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),并且永远不会执行上述方法。

4

1 回答 1

1

你应该听Event.CHANGE而不是鼠标点击本身(这样你就知道你在框架更新后得到了事件selected)。

从那里,您应该能够获取复选框的所有者(作为ItemRenderer),并检索该单元格的数据。

于 2013-01-02T16:37:14.953 回答