Flex DataGrid:向单元格添加项目侦听器以侦听同一行的另一个单元格中的ITEM_EDIT_BEGIN

时间:2012-07-13 20:03:02

标签: flex addeventlistener flex-datagrid

我对如何做某事感到有点困惑。

我有一堆带有一堆列的FlexDataGrid。其中一列有一个ItemRenderer。我希望此列中的所有单元格都能监听事件。我想要收听的事件是有人开始编辑ItemRenderered单元所在的同一行中的单元格。

所以我在我的ItemRenderer中有这个代码,它应用于列中的每个单元格:

this.addEventListener(FlexDataGridEvent.ITEM_EDIT_BEGINNING, showPopUp);

调用showPopUp时,此ItemRenderer下会出现一个按钮。

问题是,我不知道如何使eventListener工作。如何在另一个单元格中发生ITEM_EDIT_BEGINNING事件时,如何知道此项目渲染器?

我完全被难倒了。

谢谢!

1 个答案:

答案 0 :(得分:1)

您的项目渲染器实际上是一个不同的组件,因此如果您使用this关键字调度它们,则其他单元格/项目渲染器不会看到它们。

可能比你期望的更多参与,但这就是你如何完成这样的事情

1)您需要创建一个可以传递行号的自定义事件。这样的事情会起作用:

package
{
    import flash.events.Event;

    public class EditRowEvent extends Event
    {
        public function EditRowEvent(type:String, rowEditingIn:Number, bubbles:Boolean=false, cancelable:Boolean=false)
        {
            rowEditing = rowEditingIn;
            super(type, bubbles, cancelable);
        }

        public var rowEditing : Number;
    }
}

2)你需要在编辑它时调度所有项目渲染器都能看到的东西。类似于父网格的东西:

DataGrid(this.parentDocument).dispatchEvent( new EditRowEvent( 'beginEdit', this_renderers_row ) );

3)您还需要在父级上侦听此事件(在初始化项目渲染器时执行此操作):

protected function onCreationComplete(event:FlexEvent=null):void
        {
            DataGrid(this.parentDocument).addEventListener( 'beginEdit' , handleEditOnRow );
        }

4)处理在特定项目渲染器的行上开始编辑时想要发生的事情

        public function handleEditOnRow ( event : EditRowEvent ) : void {
            if( this_renderers_row == event.rowEditing ){
                // code to execute when someone starts editing this row!
            }
        }