2010-12-06 35 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的。从那里我只设置焦点/编辑位置。

相关问题