2011-04-23 2 views
0

J'ai un DataGrid spark avec selectionMode="multipleRows".Flex 4.5 Spark DataGrid - Colonne Detect cliquée dans selectionChange handler

J'ai trois colonnes dans le DataGrid.

Je ne veux pas que la sélection de ligne se produise lorsque le clic de l'utilisateur tombe sur la troisième colonne d'une ligne.

La sélection de ligne doit avoir lieu uniquement lorsque l'une des deux premières colonnes est cliquée.

Comment puis-je y parvenir? Il existe un événement selectionChanging pour la grille de données, mais l'objet GridSelectionEvent reçu dans le gestionnaire ne semble pas fournir d'informations sur la colonne sur laquelle le clic s'est produit.

Merci!

Répondre

0

Je l'ai compris moi-même. Je ne suis pas sûr que ce soit un bug dans l'étincelle DataGrid. Ce qui suit est définitivement un hack et pas propre.

Dans la fonction grid_mouseDownHandler dans le fichier DataGrid.as, il y a une ligne:

const columnIndex:int = isCellSelection ? event.columnIndex : -1; 

Cette ligne est à l'origine du columnIndex à définir comme -1 si le selectionMode du DataGrid est autre chose que GridSelectionMode.SINGLE_CELL ou GridSelectionMode.MULTIPLE_CELLS. Comme je l'ai mentionné dans la question initiale, j'ai besoin de mon datagrid pour avoir un selectionMode de GridSelectionMode.MULTIPLE_ROWS.

J'ai sous-classé le DataGrid et ré-implémenté le grid_mouseDownHandler (en gros copié-collé toute la fonction). J'ai changé seulement la ligne ci-dessus pour toujours attribuer le columnIndex à event.columnIndex.

(je l'avais aussi de copier quelques autres fonctions qui ont été citées par le grid_mouseDownHandler à mon sous-classe parce que ces fonctions ont été protégées ou mx_internal. (toggleSelection, extendSelection, isAnchorSet)

Ensuite, en cas selectionChanging gestionnaire, je pouvais faire ce qui suit:

if(2 == event.selectionChange.columnIndex) 
{ 
    event.preventDefault(); 
} 

Je me rends compte que ce n'est pas une solution propre, mais il est le meilleur que je coul d penser à. Peut-être que quelqu'un peut proposer une meilleure solution?

Questions connexes