2010-11-22 4 views
0

Je demande à étendre DataGridColumn et dans la classe d'extension, en essayant
pour spécifier une valeur pour paddingLeft, mais je suis incapable de le compiler.Extension de DataGridColumn et spécification de paddingLeft

utilisant Flex Builder 3:

mainApp.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> 
    <mx:DataGrid x="191" y="171"> 
     <mx:columns> 
      <local:DataGridColumnExt headerText="Column 1" dataField="col1"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 

DataGridColumnExt.mxml:

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGridColumn xmlns="*" xmlns:mx="http://www.adobe.com/2006/mxml" paddingLeft="10"> 
</mx:DataGridColumn> 

erreur que je reçois:
accès des styleDeclaration de propriété peut-être définie par une référence avec le type statique DataGridColumnExt. [Code généré (utilisez -keep pour sauver): Chemin: DataGridColumnExt-generated.as, Ligne: 68, colonne: 13] DataGridColumnWithLeftPadding Unknown 1290353024334 24677

Répondre

2

Vous n'avez pas besoin d'étendre DataGridColumn afin de changer le rembourrage et comme vous l'avez déjà remarqué, le réglage du style paddingLeft dans votre DataGridColumnExt ne fonctionne pas. Je suppose que cela ne fonctionne pas puisque le DataGridColumn fonctionne uniquement comme un proxy pour les styles. Le rendu de l'élément de la colonne dérive ses styles de la colonne. Donc, vous avez quelques options pour accomplir ce que vous essayez de faire (voir mon exemple ci-dessous):

  1. Utilisez mx:DataGridColumn et définissez les styles souhaités comme paddingLeft dessus. Le rendu d'élément de la colonne utilisera le remplissage (voir "Colonne 1" dans mon exemple).
  2. Créer votre propre article renderer (vous pouvez étendre mx:DataGridItemRenderer, définissez les styles directement dans le moteur de rendu de l'élément et mettre itemRenderer propriété en conséquence de la colonne (voir « colonne 2 » dans mon exemple).
  3. Si vous avez souvent besoin d'utiliser la même colonne avec les mêmes styles, il serait logique de créer votre propre DataGridColumn et définir votre itemRenderer au sein de votre colonne personnalisée (voir « colonne 3 » dans mon exemple).

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*"> 
    <mx:DataGrid x="191" y="171" dataProvider="{[{value: 'foo'}, {value : 'bar'}]}"> 
     <mx:columns> 
      <mx:DataGridColumn headerText="Column 1" dataField="value" paddingLeft="20"/> 
      <mx:DataGridColumn headerText="Column 2" dataField="value" itemRenderer="ItemRendererWithPadding"/> 
      <local:DataGridColumnExt headerText="Column 3" dataField="value"/> 
     </mx:columns> 
    </mx:DataGrid> 
</mx:Application> 

ItemRendererWithPadding.mxml

<?xml version="1.0" encoding="utf-8"?> 
<mx:DataGridItemRenderer xmlns:mx="http://www.adobe.com/2006/mxml" paddingLeft="20"> 
</mx:DataGridItemRenderer> 

DataGridColumnExt.as

package 
{ 
    import mx.controls.dataGridClasses.DataGridColumn; 
    import mx.core.ClassFactory; 

    public class DataGridColumnExt extends DataGridColumn 
    { 
     public function DataGridColumnExt(columnName:String = null) 
     { 
      super(columnName); 
      itemRenderer = new ClassFactory(ItemRendererWithPadding); 
     } 
    } 
} 
Questions connexes