поведение настраиваемой вкладки гибкой таблицы данных - PullRequest
0 голосов
/ 25 января 2010

У меня есть две сетки данных, и я хочу переопределить поведение события клавиши табуляции, чтобы оно переходило к следующей сетке данных, когда курсор достигает конца первых столбцов таблицы данных.

Любые советы приветствуются!

Markus

Ответы [ 2 ]

3 голосов
/ 25 января 2010

Маркус, это несколько функциональная демоверсия, которая должна помочь вам встать на правильный путь:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            [Bindable]
            private var src:Array = [
                { a:1, b:2, c:3 },
                { a:1, b:2, c:3 },
                { a:1, b:2, c:3 }
                ];

            private function init() : void
            {
                this.systemManager.addEventListener( KeyboardEvent.KEY_DOWN, onKeyDown );
            }

            private function onKeyDown(e:KeyboardEvent) : void
            {
                trace (dg1.rowCount, dg1.columnCount);
                if (e.target.parent.parent.parent is DataGrid)
                    var dg:DataGrid = e.target.parent.parent.parent as DataGrid;
                    if (dg == dg1)  
                        if (dg.editedItemPosition.columnIndex == dg.columnCount - 1)
                            if (dg.editedItemPosition.rowIndex == (dg.rowCount / 2) - 1)                                
                                dg2.setFocus();                 
            }
        ]]>
    </mx:Script>
    <mx:VBox>           
    <mx:DataGrid id="dg1" dataProvider="{src}" tabEnabled="true" editable="true">
        <mx:columns>
            <mx:DataGridColumn headerText="A" dataField="a" />
            <mx:DataGridColumn headerText="B" dataField="b" />
            <mx:DataGridColumn headerText="C" dataField="c" />
        </mx:columns>
    </mx:DataGrid>
    <mx:TextInput text="dfalsdfasdf" />
    <mx:DataGrid id="dg2" dataProvider="{src}" tabEnabled="true" editable="true">
        <mx:columns>
            <mx:DataGridColumn headerText="A" dataField="a" />
            <mx:DataGridColumn headerText="B" dataField="b" />
            <mx:DataGridColumn headerText="C" dataField="c" />
        </mx:columns>
    </mx:DataGrid>
    </mx:VBox>
</mx:Application>

По сути, это две сетки данных с текстовым полем между ними. Если бы вы естественным образом выполняли вкладку из последней редактируемой ячейки первой сетки, она сначала переходила бы в текстовое поле, а затем другое событие вкладки устанавливало бы фокус второй сетки данных.

Я сказал, что это «несколько» функционал, так как я не могу получить точный DataGrid.rowCount (должно быть 3, но по какой-то причине читается 6). Вот почему там есть проверка dg.rowCount / 2.

Надеюсь, это поможет вам продвинуться вперед;)

0 голосов
/ 25 января 2010

Я нашел проблему с rowCount. RowCount не представляет объем данных в сетке, он представляет количество созданных строк ... поэтому, если вы посмотрите на сетку данных, вы увидите, что у каждой есть 6 строк! вот почему

Чтобы получить правильный объем данных, я использую dg.dataProvider.length ...

Еще раз спасибо, теперь все работает отлично!

Markus

...