Flex: индекс строки в Datagrid, когда «selectable» установлен в «false» - PullRequest
0 голосов
/ 03 марта 2011

Это был бы простой вопрос, но для свойства 'selectable' установлено значение 'false', и поэтому selectedItem всегда имеет значение null.

В каждой строке у меня есть 3 кнопки.Когда я нажимаю кнопку, мне нужно извлечь данные, соответствующие выбранной строке.

Есть идеи, как мне это сделать?Спасибо.

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Полагаю, вы используете MX DataGrid, верно?

В вашем itemRenderer укажите свойство listData и преобразуйте его в DataGridListData .

При нажатии кнопки отправьте пользовательское событие, которое включает rowIndex . Вы должны иметь возможность использовать rowIndex, чтобы получить выбранный элемент из вашего dataProvider.

0 голосов
/ 03 марта 2011

Это мой рендерер предметов

<?xml version="1.0" encoding="utf-8"?>
<s:MXDataGridItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                          xmlns:s="library://ns.adobe.com/flex/spark" 
                          xmlns:mx="library://ns.adobe.com/flex/mx" 
                          focusEnabled="true">
    <fx:Script>
        <![CDATA[
            public var parentView:Object;

            public static function getEditDeleteRenderer(view:Object):ClassFactory{
                var editDeleteRenderer:ClassFactory = new ClassFactory(EditDeleteRenderer);
                editDeleteRenderer.properties = { parentView:view  };
                return editDeleteRenderer;
            }

            function editItem():void{
                parentView.editItem(data);
            }
            function deleteItem():void{
                parentView.deleteItem(data);
            }
        ]]>
    </fx:Script>
    <mx:HBox paddingLeft="5">
        <mx:Image source="assets/edit.png" click="editItem()" />
        <mx:Image source="assets/delete.png" click="deleteItem()" />        
    </mx:HBox>
</s:MXDataGridItemRenderer>

Вот как я его использую

<mx:DataGridColumn headerText="Activity" width="100" itemRenderer="{EditDeleteRenderer.getEditDeleteRenderer(this)}" />

        public function editItem(foo:Foo){
                    // do edit operation
        }


        public function deleteItem(foo:Foo):void{
                     // do delete operation
        }
...