/ / Geschachteltes Datagrid: Fokus auf das innere Datagrid setzen - flex, flex3

Verschachteltes Datagrid: Fokus auf das innere Datagrid - flex, flex3

Ich habe ein Datagrid mit einer einzelnen Spaltemit einem anderen Datagrid. Ich mache dies, um eine zeilenbereichähnliche Anzeige (mit einer Hbox unter dem untergeordneten Datagrid) zu implementieren, die Nachrichten unter jeder Zeile anzeigt. Wenn ich auf das Ende einer Zeile tippe, möchte ich, dass der Fokus auf die nächste Zeile (d. H. Das nächste untergeordnete Datagrid) und auf eine bestimmte Zelle dieser Zeile geht. Dies ist der vereinfachte Code, der den Renderer aufruft:

<mx:DataGrid width="100%"
showHeaders="false"
selectable="false"
id="ParentDatagrid"
dataProvider="{arrayActs}"
paddingBottom="0" paddingTop="0"
variableRowHeight="true">
<mx:columns>
<mx:DataGridColumn itemRenderer="components.ColumnRendererDatagrid"/>
</mx:columns>
</mx:DataGrid>

Und der Renderer-Code (ColumnRendererDatagrid):

<mx:DataGrid
id="dgLocal" width="100%" height="23" borderSides=""
dataProvider="{data}" showHeaders="false"
editable="true" selectable="false">
<mx:columns>
<mx:DataGridColumn />
<mx:DataGridColumn />
<mx:DataGridColumn />
<mx:DataGridColumn />
<mx:DataGridColumn />
</mx:columns>
</mx:DataGrid>
<mx:HRule width="100%" />
<mx:Label id="message" text="Error Message" width="100%" />

Im Moment verwende ich das folgende Snippet in ColumnRendererDatagrid, um zu überprüfen, wann die Tabulatur das Ende der Zeile erreicht und das Ereignis aufgeblasen wird:

if(dgLocal.editedItemPosition.columnIndex == 13){
dispatchEvent(new Event(MOVE_FOCUS_DOWN, true));

Von da an habe ich Schwierigkeiten, den Renderer zu untersuchen, um den Fokus zu setzen, sobald die höhere Komponente dieses Ereignis erhält

Antworten:

0 für die Antwort № 1

Ok, hier ist die Lösung, die ich gefunden habe. Dies ist der Code im Event-Handler der Eltern (der den MOVE_FOCUS_DOWN behandelt):

//Find the postition of the item that sent the event :
for each( var row:Object in ParentDatagrid.dataProvider ) {
if( (event.target as ColumnRendererDatagrid).data == row) {
break;
}
i++;
}

//Get the renderer of the next item :
var render:IListItemRenderer = ParentDatagrid.itemToItemRenderer(arrayActes.getItemAt(i+1));
(render as ColumnRendererDatagrid).dgLocal.editedItemPosition = {rowIndex:0, columnIndex:1}

(Natürlich sollte in echtem Code geprüft werden, ob das nächste Objekt vorhanden ist.) Der Typ ColumnRendererDatagrid Von dort aus setze ich einfach die Fokus- / Bearbeitungsposition.