Buenas,
He creado un AdvancedDataGrid con estructura de herencia, donde cada padre tiene un hijo.
Ahora lo que quiero es que si selecciono o paso por encima del padre se seleccione o se sombree tb el hijo.
Es decir que se comporte como si padre e hijo fueran una unica fila.
He probado creando una clase que extienda de AdvancedDataGrid y sobreescibiendo la funcion DrawCellItem, pero no pasa por ahi al indicarle al datagrid que trabaje con filas.
Tambien he probado con selectItem, pero no consigo localizar el método por encima, ya que asi solo me selecciona el contrario al que seleccionaria normalamente.
Tamebién en probado con los eventos click y change, pero no consigo que funcione correcto ya que cuando llega a ellos el elemento ya ha desaparecido de la selección o a sido añadido, por lo que no puedo diferenciar bien entre borrado y nueva seleccion.
Alquién tiene laguna idea.

Este es mi datagrid:

Código ActionScript :

<dgm:AdvancedDataGridMultilineEx id="myADG" 
   horizontalGridLines="false"
   disclosureClosedIcon="{null}"
   disclosureOpenIcon="{null}"   
   treeColumn="{fila0col0}"
   verticalGridLines = "false"
   alternatingItemColors="{arrayColoresFila}"
   columnWidth="100"
   rowHeight="30"
   iconFunction="myIconFunction"
   selectionColor="#ffebcd"
   rollOverColor="#ffebcd"
   selectionMode="multipleRows"
   
   >
   <dgm:dataProvider>
      <mx:HierarchicalData source="{dpHierarchy}"/>
   </dgm:dataProvider>
   <dgm:columns>
       <util:DataGridColumnEx id="fila0col0" headerText="" width="100"/>
      <util:DataGridColumnEx id="fila0col1" dataField="estado" headerText="Estado" width="100" alternatingItemColors="{arrayColoresCol}" itemRenderer="milcomponents.dataGridMuestra.ImagenEstado"/>
       <util:DataGridColumnEx id="fila0col2" dataField="fecha" headerText="Fecha" width="100" alternatingItemColors="{arrayColoresCol}" itemRenderer="util.DataGridItemRendererEx"/>
       <util:DataGridColumnEx id="fila0col3" dataField="titulo" headerText="Titulo" width="100" alternatingItemColors="{arrayColoresCol}" itemRenderer="util.DataGridItemRendererEx"/>
       <util:DataGridColumnEx id="fila0col4" dataField="agencia" headerText="Agencia" width="100" alternatingItemColors="{arrayColoresCol}" itemRenderer="util.DataGridItemRendererEx"/>
       <util:DataGridColumnEx id="fila0col5" dataField="autor" headerText="Autor" width="100" alternatingItemColors="{arrayColoresCol}" itemRenderer="util.DataGridItemRendererEx"/>
       <util:DataGridColumnEx id="fila0col6" dataField="modAdelanto" headerText="Modelo de Adelanto" width="100" alternatingItemColors="{arrayColoresCol}" itemRenderer="util.DataGridItemRendererEx"/>
   </dgm:columns>
   
   <dgm:rendererProviders>            
      <!-- Col 0:Columna de imagenes -->
                    
           <mx:AdvancedDataGridRendererProvider 
               dataField="detail" 
               renderer="milcomponents.dataGridMuestra.Imagen" 
               depth="2"
               columnIndex="0"
               id="fila1col0"
            />
   
      <!-- Fila 2:Columna de texto -->
           <mx:AdvancedDataGridRendererProvider 
               dataField="detail" 
               renderer="milcomponents.dataGridMuestra.Texto" 
               columnIndex="1"
            depth="2"
               columnSpan="6"
               id="fila1col1"
               />         
                       
   </dgm:rendererProviders> 

</dgm:AdvancedDataGridMultilineEx>



Esta es la clase que cree:

Código ActionScript :

package milcomponents.dataGridMuestra
{
   import flash.display.Graphics;
   import flash.display.Sprite;
   import flash.geom.Point;
   
   import mx.controls.AdvancedDataGrid;
   import mx.controls.listClasses.BaseListData;
   import mx.controls.listClasses.IListItemRenderer;
   import mx.core.IFlexDisplayObject;
   import mx.core.IInvalidating;
   import mx.core.IUITextField;
   import mx.core.SpriteAsset;
   import mx.core.mx_internal;
   
   use namespace mx_internal;


   public class AdvancedDataGridMultilineEx extends AdvancedDataGrid
   {
      public function AdvancedDataGridMultilineEx()
      {
         super();
      }
      
       override protected function drawCellItem(item:IListItemRenderer,
                                       selected:Boolean    = false,
                                       highlighted:Boolean = false,
                                       caret:Boolean       = false,
                                       transition:Boolean  = false):void
       {
          //SI es par --> el padre
          var index:int       = pt.y;
          if( (index%2)==0){
           if (!item || isHeaderItemRenderer(item))
               return;
   
           var pt:Point = itemRendererToIndices(item);
           if (!pt)
               return;
   
           var index:int       = pt.y;
           var columnIndex:int = displayToAbsoluteColumnIndex(pt.x);
   
           var rowData:BaseListData = rowMap[item.name];
   
           var o:Sprite;
           var g:Graphics;
   
           var itemXPos:Number = item.x;
   //         if (columnIndex > lockedColumnCount)
   //             itemXPos = getAdjustedXPos(itemXPos);
         
         //Si esta iluminado lo marcamos como tal 
           if (highlighted
               && (!highlightItemRenderer
                   || (highlightUID != rowData.uid && columnIndex != highlightColumnIndex)))
           {
               if (!highlightIndicator)
               {
                   o = new SpriteAsset();
                   highlightIndicator = o;
               }
   
               o = highlightIndicator;
   
               addIndicatorToSelectionLayer(o, pt.x);
   
               drawHighlightIndicator(
                   o,                                  // sprite
                   itemXPos,                             // x
                   rowInfo[rowData.rowIndex].y,        // y
                   item.width,                         // width
                   rowInfo[rowData.rowIndex].height,   // height
                   getStyle("rollOverColor"),          // color
                   item);                              // IListItemRenderer
   
               highlightItemRenderer = item;
               highlightUID          = rowData.uid;
               highlightColumnIndex  = columnIndex;
            
//El segundo elemento
var implicado:IListItemRenderer;

//Seleccionamos su hijo o su padre
var fila:int = super.itemRendererToIndices(item).y;
var filaImplicada:int;
//miramos si es padre o hijo mirando si su fila es par
var isPar:Boolean = ((fila%2) == 0) ? true : false; 
//Es la primera fila (0,2,4...) -> Hallamos el hijo
if (isPar){
   filaImplicada = fila + 1;
    implicado = listItems[filaImplicada][0];//indicesToItemRenderer(fila + 1, 0);
}
//Es la segunda linea (1,3,5..) -> Hallamos el padre
else{
   filaImplicada = fila - 1;
   implicado = listItems[filaImplicada][0];//indicesToItemRenderer(fila - 1, 0);
}

var ptImplicado:Point = itemRendererToIndices(implicado);
var indexImplicado:int = ptImplicado.y;
var columnIndexImplicado:int = displayToAbsoluteColumnIndex(ptImplicado.x);
   
var rowDataImplicado:BaseListData = rowMap[implicado.name];   
var itemXPosImplicado:Number = implicado.x;   

    if (!highlightIndicator)
    {
        o = new SpriteAsset();
        highlightIndicator = o;
    }

    o = highlightIndicator;

    addIndicatorToSelectionLayer(o, ptImplicado.x);

    drawHighlightIndicator(
        o,                                  // sprite
        itemXPosImplicado,                             // x
        rowInfo[rowDataImplicado.rowIndex].y,        // y
        implicado.width,                         // width
        rowInfo[rowDataImplicado.rowIndex].height,   // height
        getStyle("rollOverColor"),          // color
        implicado);                              // IListItemRenderer

    highlightItemRenderer = implicado;
    highlightUID          = rowDataImplicado.uid;
    highlightColumnIndex  = columnIndexImplicado;
           }
           else if (!highlighted
                    && highlightItemRenderer
                    && (rowData && highlightUID == rowData.uid && highlightColumnIndex == columnIndex))
           {
               if (highlightIndicator)
                   Sprite(highlightIndicator).graphics.clear();
               lastHighlightItemRenderer = highlightItemRenderer;
               highlightItemRenderer     = null;
               highlightUID              = null;
               highlightColumnIndex      = -1;
           }
   
           if (selected)
           {
               if (!super.cellSelectionIndicators[rowData.uid])
                   cellSelectionIndicators[rowData.uid] = {};
   
               var newIndicator:Boolean = false;
   
               if (!cellSelectionIndicators[rowData.uid][columnIndex.toString()])
               {
                   o = new SpriteAsset();
                   o.mouseEnabled = false;
                   cellSelectionIndicators[rowData.uid][columnIndex.toString()] = o;
                   newIndicator = true;
               }
               o = cellSelectionIndicators[rowData.uid][columnIndex.toString()];
               addIndicatorToSelectionLayer(o, pt.x);
               
                   drawSelectionIndicator(
                       o,                                      // sprite
                       itemXPos,                               // x
                       rowInfo[rowData.rowIndex].y,            // y
                       item.width,                             // width
                       rowInfo[rowData.rowIndex].height,       // height
                       enabled ?                               // color
                       getStyle("selectionColor") :
                       getStyle("selectionDisabledColor"),
                       item);                                  // IListItemRenderer
   
               if (newIndicator)
                   if (transition)
                       applyCellSelectionEffect(o, rowData.uid, columnIndex, item);
           }
           else if (!selected)
           {
               if (rowData && cellSelectionIndicators[rowData.uid]
                   && cellSelectionIndicators[rowData.uid][columnIndex.toString()])
               {
                   o = cellSelectionIndicators[rowData.uid][columnIndex.toString()];
                   if (o.parent)
                       o.parent.removeChild(o);
   
                   delete cellSelectionIndicators[rowData.uid][columnIndex.toString()];
                   if (!atLeastOneProperty(cellSelectionIndicators[rowData.uid]))
                       delete cellSelectionIndicators[rowData.uid];
               }
           }
   
           if (caret)
           {
               // Only draw the caret if there has been keyboard navigation.
               if (showCaret)
               {
                   if (!caretIndicator)
                   {
                       o = new SpriteAsset();
                       o.mouseEnabled = false;
                       caretIndicator = o;
                   }
                   o = caretIndicator;
   
                   addIndicatorToSelectionLayer(o, pt.x);
   
                   drawCaretIndicator(
                       o,                                  // sprite
                       itemXPos,                           // x
                       rowInfo[rowData.rowIndex].y,        // y
                       item.width,                         // width
                       rowInfo[rowData.rowIndex].height,   // height
                       getStyle("selectionColor"),         // color
                       item);                              // IListItemRenderer
   
                   caretItemRenderer = item;
                   caretUID          = rowData.uid;
                   caretColumnIndex  = columnIndex;
               }
           }
           else if (!caret && caretItemRenderer
                    && caretUID == rowData.uid
                    && caretColumnIndex == columnIndex)
           {
               if (caretIndicator)
                   Sprite(caretIndicator).graphics.clear();
   
               caretItemRenderer = null;
               caretUID          = null;
           }
   
           if (item is IFlexDisplayObject)
           {
               if (item is IInvalidating)
               {
                   IInvalidating(item).invalidateDisplayList();
                   IInvalidating(item).validateNow();
               }
           }
           else if (item is IUITextField)
           {
               IUITextField(item).validateNow();
           }
   
           var rowIndex:int = rowMap[item.name].rowIndex;
           var optimumColumns:Array = getOptimumColumns();
           for (var i:int = 0; i < optimumColumns.length; i++)        
           {
               var r:IListItemRenderer = listItems[rowIndex][i];
               updateDisplayOfItemRenderer(r);
           }
        }
       }
       
       override protected function selectItem(item:IListItemRenderer,
                                           shiftKey:Boolean, ctrlKey:Boolean,
                                           transition:Boolean = true):Boolean
       {
         //Seleccionamos la fila en la que cliqueamos
         var estadoPrimero:Boolean = super.selectItem(item, shiftKey, ctrlKey, transition);
                  
         var estadoImplicado:Boolean;
         var implicado:IListItemRenderer;
         
         //Seleccionamos su hijo o su padre
         //Miramos si tiene padre
         var fila:int = super.itemRendererToIndices(item).y;
         //miramos si es padre o hijo mirando si su fila es par
         var isPar:Boolean = ((fila%2) == 0) ? true : false; 
         //Es la primera fila (0,2,4...) -> Hallamos el hijo
         if (isPar){
             implicado = listItems[fila + 1][0];//indicesToItemRenderer(fila + 1, 0);
         }
         //Es la segunda linea (1,3,5..) -> Hallamos el padre
         else{
            implicado = listItems[fila - 1][0];//indicesToItemRenderer(fila - 1, 0);
         }
         
         //Añadimos el implicado
         estadoImplicado = super.selectItem(implicado, shiftKey, ctrlKey, transition);
         
          return (estadoPrimero && estadoImplicado);
       }
   }
} 


Muchas gracias, por cualquier ayuda!