[c#] setvalue dans un array
Résolu/Fermé
Laraannain
Messages postés
109
Date d'inscription
mercredi 23 décembre 2009
Statut
Membre
Dernière intervention
3 février 2011
-
Modifié par Laraannain le 4/11/2010 à 10:14
Laraannain Messages postés 109 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 3 février 2011 - 5 nov. 2010 à 09:23
Laraannain Messages postés 109 Date d'inscription mercredi 23 décembre 2009 Statut Membre Dernière intervention 3 février 2011 - 5 nov. 2010 à 09:23
A voir également:
- [c#] setvalue dans un array
- Array mac - Guide
- Trying to access array offset on value of type bool - Forum PHP
- Vba collection to array ✓ - Forum VB / VBA
- Trying to access array offset on value of type bool in ✓ - Forum PHP
- Iso c++ forbids variable length array ✓ - Forum C++
2 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
4 nov. 2010 à 10:21
4 nov. 2010 à 10:21
Bonjour,
Le problème ne vient pas de SetValue, mais plutôt de ItemArray.
ItemArray n'est pas la ligne elle-même, mais une copie des données de la ligne mise dans un tableau.
Du coup, tu changes une valeur dans un tableau créé à la volée... mais pas dans ta DataTable / DataRow !
Pour changer la valeur dans ta DataRow, il faut accéder directement à son élément via son index.
Ton code devient donc :
(À l'affichage, j'ai laissé le ItemArray.[...] car pour le coup, ça ne donne pas de problème. Mais tu peux aussi utiliser directement dat.Rows[0][i].ToString() )
Xavier
Le problème ne vient pas de SetValue, mais plutôt de ItemArray.
ItemArray n'est pas la ligne elle-même, mais une copie des données de la ligne mise dans un tableau.
Du coup, tu changes une valeur dans un tableau créé à la volée... mais pas dans ta DataTable / DataRow !
Pour changer la valeur dans ta DataRow, il faut accéder directement à son élément via son index.
Ton code devient donc :
DataTable dat = _data; for (int i = 0; i < dat.Columns.Count; i++) { dat.Rows[0][i] = infoPanel.Controls[2 * i + 1].Text; MessageBox.Show(infoPanel.Controls[2 * i + 1].Text + " : " +dat.Rows[0].ItemArray.GetValue(i).ToString()); }
(À l'affichage, j'ai laissé le ItemArray.[...] car pour le coup, ça ne donne pas de problème. Mais tu peux aussi utiliser directement dat.Rows[0][i].ToString() )
Xavier
Laraannain
Messages postés
109
Date d'inscription
mercredi 23 décembre 2009
Statut
Membre
Dernière intervention
3 février 2011
15
4 nov. 2010 à 10:28
4 nov. 2010 à 10:28
Et ça marche !
Je ne pensais pas qu'il s'agissait uniquement d'une copie des données. J'ai encore un peu de boulot pour maîtriser les DataTables moi ^^"
Merci beaucoup :)
Je ne pensais pas qu'il s'agissait uniquement d'une copie des données. J'ai encore un peu de boulot pour maîtriser les DataTables moi ^^"
Merci beaucoup :)
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié par Reivax962 le 4/11/2010 à 10:35
Modifié par Reivax962 le 4/11/2010 à 10:35
En fait, tu pourrais résoudre ton problème en utilisant des ItemArray, comme ceci :
Mais c'est plus lourd, car à chaque itération tu remplaces l'ensemble des valeurs de la ligne...
DataTable dat = _data; for (int i = 0; i < dat.Columns.Count; i++) { Object[] unItemArray = dat.Rows[0].ItemArray; unItemArray.SetValue(infoPanel.Controls[2 * i + 1].Text,i); dat.Rows[0].ItemArray = unItemArray; MessageBox.Show(infoPanel.Controls[2 * i + 1].Text + " : " +dat.Rows[0].ItemArray.GetValue(i).ToString()); }
Mais c'est plus lourd, car à chaque itération tu remplaces l'ensemble des valeurs de la ligne...
Laraannain
Messages postés
109
Date d'inscription
mercredi 23 décembre 2009
Statut
Membre
Dernière intervention
3 février 2011
15
5 nov. 2010 à 09:23
5 nov. 2010 à 09:23
ce serait en effet, un petit peu plus lourd, mon programme est déjà assez gros pour que j'évite de le ralentir un plus.
merci pour ton aide ;-)
merci pour ton aide ;-)