2009-10-15 9 views
0

J'ai un DataGrid qui contient une DataGridColumn avec un textinput et DataGridColumn avec un bouton . Le DataGrid est lié à du code XML qui affiche des valeurs dans la zone de texte. Lorsque vous cliquez sur le bouton d'une ligne, je dois extraire la valeur de la zone de texte et l'enregistrer dans le noeud XML correspondant. Ma solution était simplement de passer l'ID de la ligne à l'événement de clic sur le bouton, puis de faire une boucle sur les lignes jusqu'à ce que je trouve l'ID, puis de saisir la valeur de la zone de texte. Simple.comment faire une boucle sur une des lignes de datagrids flex

Cependant, le seul conseil que je peux trouver sur la boucle sur les lignes est via le dataProvider sous-jacent, ce qui est un non-sens car les deux ne sont pas la même chose.

Est-ce encore possible? ou y a-t-il un meilleur moyen?
NOTE Je préférerais ne pas réécrire le balisage, sauf si je dois le faire.
Merci

Répondre

1

listData.rowIndex des itemRenderer renvoie l'index de la ligne courante. Vous pouvez le lire à partir du gestionnaire de clic comme:

private function clickHandler(event:MouseEvent):void 
{ 
    var listData:BaseListData = IDropInListItemRenderer(event.target).listData; 
    var clickedRowIndex:Number = listData.rowIndex; 
} 
+0

assurez-vous que le event.target met effectivement en œuvre IDropInListItemRenderer; par exemple, de nombreux conteneurs ne l'implémentent pas, alors que de nombreux composants le font. –

+0

je crois qu'il a un 'Button' comme itemRenderer – Amarghosh

2

Vous utilisez probablement un itemRenderer pour votre DataGridColumn pour montrer la zone de texte (aka, composant TextInput). Je vous suggère d'envoyer un événement personnalisé à partir du TextInputitemRenderer lorsque vous avez un événement TextInput.dataChange (ou un autre TextInput.Event qui convient lorsque vous êtes prêt à enregistrer la valeur).
http://livedocs.adobe.com/flex/3/langref/mx/controls/TextInput.html

S'il vous plaît rappelez-vous que vous devez bulle cet événement de manipulation en dehors des itemRenderer (par exemple, le DataGrid) - itemRenderers ne gèrent pas bien les événements.
En outre, une raison pour laquelle un bouton pour enregistrer votre valeur TextInput n'est pas une bonne idée, c'est parce qu'ils sont tous deux itemRenderers, et il est difficile de communiquer entre itemRenderers - c'est difficile parce qu'Adobe le considère comme du code non propre.
http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html

En outre, cela est une autre solution qui change la dataProvider pour une zone de liste déroulante (dans votre cas, il est un TextInput au lieu de ComboBox):
http://www.switchonthecode.com/tutorials/simple-datagrid-item-editor-in-flex

+0

Quelques bons conseils merci j'étudierai –

Questions connexes