/ /ネストされたデータグリッド:内部データグリッドにフォーカスを設定する-flex、flex3

ネストされたDataGrid:内部のDataGridにフォーカスを設定する - flex、flex3

単一の列がレンダリングされたデータグリッドがあります別のデータグリッドで。これは、各行の下にメッセージを表示する(子データグリッドの下にhboxを持つ)rowspanのような表示を実装するために行っています。 タブで行の最後に到達したら、フォーカスを次の行、つまり次の子データグリッドとその行の特定のセルに渡します。 これは、レンダラーを呼び出す簡略化されたコードです。

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

レンダラー(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%" />

とりあえず、ColumnRendererDatagridで次のスニペットを使用して、タブ移動が行の最後に到達してイベントをバブルアップするタイミングを確認します。

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

上位コンポーネントがこのイベントを取得したら、そこからレンダラーにドリルダウンしてフォーカスを設定する方法に苦労しています。どんな助けでも大歓迎です。

回答:

回答№1は0

さて、ここに私が思いついた解決策があります。これは、親のイベントハンドラーのコードです(MOVE_FOCUS_DOWNを処理します)。

//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}

(明らかに、次のオブジェクトが存在するかどうかを確認するために実際のコードで確認する必要があります)ColumnRendererDatagridタイプです。そこから、フォーカス/編集位置を設定するだけです。