-1

2つのデータグリッドがあり、タブキーイベントの動作をオーバーライドして、カーソルが最初のデータグリッド列の最後に到達したときに次のデータグリッドに移動するようにします。

ヒントは大歓迎です!

マーカス

4

2 に答える 2

3

Markus、これはやや機能的なデモであり、正しい方向に進むはずです。

<?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>

基本的に、これは2つのデータグリッドであり、その間にテキストフィールドがあります。最初のグリッドの最後の編集可能なセルから自然にタブ移動する場合は、最初にテキストフィールドに移動し、次に別のタブイベントによって2番目のデータグリッドにフォーカスが設定されます。

正確なDataGrid.rowCountを取得できないように見えるため、これは「ある程度」機能していると言いました(3である必要がありますが、何らかの理由で6を読み取ります)。これが、dg.rowCount/2チェックインがある理由です。

うまくいけば、これはあなたを前進させるのに役立つはずです;)

于 2010-01-25T17:27:40.340 に答える
0

rowCountに問題が見つかりました。rowCountはグリッド内のデータの量を表すのではなく、作成された行の数を表します...したがって、データグリッドを見ると、それぞれに6つの行があることがわかります。それが理由です

適切な量​​のデータを取得するには、dg.dataProvider.length...を使用します。

もう一度ありがとう、それは今完全に動作します!

マーカス

于 2010-01-25T19:59:15.670 に答える