2009-02-16 9 views
2

À moins de manquer quelque chose d'évident ici, il n'existe aucun moyen de désactiver une ou plusieurs lignes dans un DataGrid. Je m'attendrais à une propriété disabledRows ou disabledRowIndidices sur le composant DataGrid ou List mais cela ne semble pas exister.Désactiver les lignes dans Flex DataGrid

J'ai trouvé une propriété "rendererArray" dont la portée est mx_internal et qui contient tous les itemrenderers de toutes les cellules de la grille de données. Je peux donc vérifier le type et la valeur des données dans le moteur de rendu et activer ou désactiver toutes les cellules de la même ligne, mais cela ressemble trop à un hack.

Des suggestions?

Édition: Je réalise que la désactivation d'une ligne peut signifier différentes choses. Dans mon cas, cela signifie ne pas pouvoir modifier la ligne même lorsque la propriété editable de la grille de données est définie sur true. Cela pourrait aussi signifier ne pas pouvoir sélectionner une rangée, mais ce n'est pas ce que je cherche.

+0

Que signifie être désactivé pour une ligne DataGrid? – inferis

+0

Dans mon cas, cela signifie ne pas pouvoir l'éditer. Cela pourrait cependant aussi signifier ne pas pouvoir sélectionner une rangée. Bonne remarque, je vais mettre à jour la question. –

+1

De plus, les DataGrid ne sont pas définis par leurs lignes, ils sont définis par des colonnes. Pour désactiver certaines lignes, vous parlez de connaître les données sous-jacentes, ce qui signifie que vous les manipulez dans itemRenderers. – inferis

Répondre

0

Alex Harui fournit un bon exemple avec la source ici, http://blogs.adobe.com/aharui/2007/06/disabling_list_selection.html C'est une solution un peu longue, mais elle couvre l'interaction de la souris et du clavier avec la grille de données. Je suis d'accord avec vous, il est surprenant qu'il n'y ait pas de méthode «intégrée» pour le faire.

2

en fait c'est mieux fait via "itemEditBeginning". Regardez ici pour un bon tutoriel: link text

6

Pour ce faire, vous aurez besoin de données pour cette ligne pour indiquer qu'elle n'est pas modifiable. Puis, quand la « itemEditBeginning », puis vérifier les données ou index de ligne pour activer/désactiver le comportement par défaut avec event.preventDefault ...

public function preventEditing(event:DataGridEvent):void 
{ 
    var status : Boolean = ArrayObjs[rowIndex].isYourCondition; 

    if (status == true) 
    { 
     event.preventDefault(); 
    } 
} 

L'autre option est de faire une coutume ItemRenderer pour votre cellule de données, mais n » Je pense que c'est ce que vous voulez, car vous devriez le faire pour chacune de vos cellules.

0

Il suffit de définir une fonction à la « itemEditBegin » du DataGrid qui fait quelque chose comme ceci:

protected function validateEdition(event:DataGridEvent):void{ 
    if([EDITION CRITERA NOT MET]){ 
      event.preventDefault(); 
    } 
} 

<mx:DataGrid id="grid" itemEditBegin="validateEdition(event)" editable="true"> 
     <mx:columns> 
     [[YOUR COLUMN CONFIGURATION]] 
     </mx:columns> 
</mx:DataGrid> 

event.preventDefault() arrêtera le DataGrid de commutation du ItemRenderer au itemEditor pour arrêter si l'édition de la rangée qui ne répond pas aux critères. Votre DataGrid doit être modifiable pour que cela fonctionne.

Cela devrait faire l'affaire.

Questions connexes