2009-08-26 5 views
2

J'ai un DataGrid avec une DataGridColumn dedans. Sans un itemrenderer personnalisé, je peux utiliser une fonction datatip pour montrer une datatip personnalisée mais maintenant je veux avoir un rendu personnalisé pour colorier les lignes différemment. Par conséquent j'ai étendu une étiquette et ai changé la méthode de données mais maintenant ma fonction de datatip ne fonctionne plus.ItemRender personnalisé dans Datagrid avec Datatip

Des idées?

merci à l'avance

Sebastian

Répondre

1

Je sais que cette question est un peu vieux, mais j'ai juste rencontré le même problème et l'ai résolu en regardant comment la classe standard DataGridItemRenderer le fait. J'ai donc fini par copier cette fonction toolTipShowHandler() dans ma classe (sans aucune modification), en implémentant l'interface IDropInListItemRenderer et en ajoutant quelques lignes dans la fonction commitProperties() de mon moteur de rendu, qui étaient également inspirées de DataGridItemRenderer.

Espérons que cela aide.

-2

Situé juste à côté du haut de ma tête, peut-être faire votre article personnalisé renderer étendre DataGridColumn. Cela donnera à votre rendu d'élément toutes les fonctionnalités d'une colonne régulière.

+0

DataGridColumn ne couvre pas UIComponent ou même DisplayObject. –

+0

Ah oui, c'est correct.Essayez de regarder dans la classe DataGridItemRenderer, dans la méthode validateProperties, il y a du code qui gère les dataTip. Vous pouvez être en mesure de l'implémenter dans votre moteur de rendu personnalisé. –

1

Je suis un peu en retard à la fête, mais j'ai rencontré ce problème avec un DataGridItemRenderer personnalisé pour les images. La solution décrite au lien suivant a bien fonctionné pour moi:

http://www.kalengibbons.com/blog/index.php/2008/12/displaying-datatips-when-using-an-itemrenderer/

L'essentiel est que vous remplacez l'élément updateDisplayList() de rendu et définir une infobulle en appelant le dataTipFunction et/ou en utilisant seulement le dataTipField comme un rendu d'élément intégré.

1

copier le contenu du lien donné par cbranch ici. stackoverflow est plus fiable pour le code snippets garder

Affichage infobulles lors de l'utilisation d'un itemRenderer

Une des mauvaises choses sur l'utilisation itemRenderers dans un DataGridColumn est que vous perdez la fonctionnalité dataTip qu'il fournit normalement. Eh bien, voici un moyen de simuler cette fonctionnalité.

D'abord, ajoutez dataTipField ou dataTipFunction à DataGridColumn comme vous le feriez normalement.

<mx:DataGridColumn headerText="DataTip" 
     dataField="name1" 
     showDataTips="true" 
     dataTipField="description1" /> 

Ensuite, dans votre itemRenderer ajoutez le code suivant pour pouvoir puiser dans ces informations et afficher une info-bulle à la place. dans vos colonnes

private function getToolTip():String{ 
    var dg:DataGrid = listData.owner as DataGrid; 
    var func:Function = dg.columns[listData.columnIndex].dataTipFunction; 
    if(func != null){ 
      return func.call(this, this.data); 
    }else if(dg.columns[listData.columnIndex].dataTipField.length){ 
      return data[dg.columns[listData.columnIndex].dataTipField]; 
    }else{ 
      return ""; 
    } 
} 

override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ 
    super.updateDisplayList(unscaledWidth, unscaledHeight); 
    this.toolTip = getToolTip(); 
    } 

Cela fonctionne avec les deux dataTipFields et dataTipFunctions et vous permet de traiter les dataTip de la même façon, peu importe si vous utilisez un itemRenderer ou non. La seule différence mineure est le positionnement de l'étiquette, mais qui peut être facilement modifié avec les styles. Vous pouvez télécharger le code source complet ici, pour un exemple fonctionnel de comment cela fonctionne.

source

Questions connexes