Salut tout le monde,
Existe-t-il un moyen pour tester l'égalité de deux lignes d'un dataGrid?
Merci d'avance.
Version imprimable
Salut tout le monde,
Existe-t-il un moyen pour tester l'égalité de deux lignes d'un dataGrid?
Merci d'avance.
Euh ... implémenter une méthode equals sur les objets de cette datagrid et les comparer entre eux tout simplement ?
Sinon je ne pense malheureusement pas qu'il puisse y avoir de magie...
tu peux pas tester plutôt dans le provider de ton Datagrid, se serait beaucoup plus simple...
Evidemment quand je parle des objets de la datagrid, je parle des objets contenus dans le dataprovider (et affichés dans la datagrid).
Merci pour vos réponses,
En fait mon but final est de remplir mon dataGrid à partir de certains champs de texte.
Pour optimiser le remplissage il ne faut pas insérer une ligne qui existe déjà.
J'ai essayé cette fonction mais ça ne marche pas comme je veux:
sachant bien que collection ici désigne un tableau que je rempli avec les valeurs des champs de texte comme suit:Code:
1
2
3
4
5
6
7
8
9
10
11
12 public function verifierExistenceLigneDataGrid(dataGrid:DataGrid,collection:ArrayCollection):Boolean{ var trouve:Boolean=false var i:Number=0 while (i<dataGrid.dataProvider.length && (!trouve)) { if (dataGrid.dataProvider[i]==collection[0]){ trouve=true } i++; } return trouve; }
je vous remercie encore de vos suggestionsCode:
1
2 var collection:ArrayCollection = new ArrayCollection(); collection.addItem({col1: txt1.text, col2: txt2.text, col3: txt3.text})
Ta ligne
retourne false je pense et donc ton code ne marche pas.Code:
1
2 dataGrid.dataProvider[i]==collection[0]
Comparer deux objets complexes entre eux ne se fait pas tout seul.
Tiens, essaie ça en debug, click sur le bouton et regarde la console. Ça devrait te mettre sur la piste.
Par ailleurs, pourquoi utiliser une ArrayCollection juste pour y mettre un seul élément si j'ai bien compris (ton tableau de valeur) ?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*"> <mx:Script> <![CDATA[ private function test(event:Event=null):void{ trace(obj1 == obj2); // FALSE ! trace((obj1['attr1'] == obj2['attr1']) && obj1['attr2'] == obj2['attr2']); // TRUE ! } ]]> </mx:Script> <mx:Object id="obj1"> <mx:attr1>1234</mx:attr1> <mx:attr2>coucou</mx:attr2> </mx:Object> <mx:Object id="obj2"> <mx:attr1>1234</mx:attr1> <mx:attr2>coucou</mx:attr2> </mx:Object> <mx:Button label="test" click="test()"/> </mx:Application>
j'ai pensé à cette solution mais le problème est que je ne travaille pas sur un dataGrid figé, ça veut dire que le nombre de colonnes change d'un dataGrid à l'autre que je renvoi à cette fonction.
Et bien tu fais de l'introspection et tu vérifies que pour chaque attribut, la valeur est identique. Un truc du genre (non testé) :
Tu peux aussi créer un objet dans lequel tu mettras un attribut de type List ou Array contenant l'ensemble des autres attributs et écrire une méthode qui compare ces listes (je sais pas si je suis très clair là).Code:
1
2
3
4
5
6
7
8
9
10
11
12 var lignesDifferentes:Boolean = false; var infoObjSource:XML = describeType(source); var infoObjDatagrid:XML = describeType(unObjetDuDatagrid); for each (var property:XML in infoObjSource..accessor) { if (property.@access == 'readwrite') { if (unObjetDuDatagrid[property.@name] != caller(source[property.@name])){ lignesDifferentes = true; break; } } }
Enfin t'as pas mal de manières différentes de faire ce que tu veux.
T'as pas répondu à ma question "Par ailleurs, pourquoi utiliser une ArrayCollection juste pour y mettre un seul élément si j'ai bien compris (ton tableau de valeur) ?"