2010-12-06 9 views
0

私は別のデータグリッドでレンダリングされた単一の列を持つデータグリッドを持っています。私は、各行の下にメッセージを表示するrowspanのような表示(子のデータグリッドの下にhboxを持つ)を実装するためにこれをやっています。 タブをクリックして行の最後に到達すると、フォーカスは次の行、つまり次の子データグリッドとその行の特定のセルに渡されます。ネストされたデータグリッド:内部のデータグリッドにフォーカスを設定

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

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

答えて

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のである(当然チェックは次のオブジェクトが存在するかどうかを確認するために実際のコードになされるべきです)。そこからフォーカス/編集位置を設定しました。