flex datagrid自定义选项卡行为

时间:2010-01-25 16:29:25

标签: flex tabs behavior

我有两个datagrids,我想覆盖tab-key事件的行为,以便当光标到达第一个datagrid列的末尾时,它会转到下一个datagrid。

任何提示都表示赞赏!

马库斯

2 个答案:

答案 0 :(得分: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>

基本上,这是两个数据网格,它们之间有文本字段。如果您要从第一个网格的最后一个可编辑单元格中自然地进行制表,则它将首先转到文本字段,然后另一个制表符事件将焦点设置为第二个数据网格。

我说这有点“功能”,因为我似乎无法获得准确的DataGrid.rowCount(它应该是3,但出于某种原因读取6)。这就是为什么那里有一个dg.rowCount / 2支票。

希望这可以帮助你前进;)

答案 1 :(得分:0)

我发现了rowCount的问题。 rowCount不表示网格中的数据量,它表示创建的行数...因此,如果查看数据网格,您会看到每行有6行!那就是为什么

为了获得正确数量的数据,我使用了dg.dataProvider.length ...

再次感谢,它现在完美无缺!

马库斯