2010-12-06 36 views
0

我有一個數據網格與其他數據網格呈現單列。我這樣做是爲了實現在每行下顯示消息的類似rowspan的顯示(在子數據網格下面有一個hbox)。 當我選中併到達行尾時,我希望焦點傳遞到下一行,即下一個子數據網格和該行的特定單元格。 這是簡化的代碼調用渲染:嵌套的datagrid:設置內部數據網格焦點

<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下面的代碼片段檢查Tab鍵到達時該行的結尾並冒出事件:

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的。從那裏我只設置焦點/編輯位置。

相關問題