[c#] setvalue dans un array
Résolu
Laraannain
Messages postés
109
Date d'inscription
Statut
Membre
Dernière intervention
-
Laraannain Messages postés 109 Date d'inscription Statut Membre Dernière intervention -
Laraannain Messages postés 109 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je me trouve face à un problème que je ne m'explique pas avec la fonction "setvalue"
voici mon code :
en gros je lui dit de mettre un élément "infoPanel.Controls[2 * i + 1].Text" à la place i.
puis je lui fais afficher
"infoPanel.Controls[2 * i + 1].Text : l'élément en position i"
et en l'occurence la fonction setvalue n'a rien fait puisque ces deux valeurs devraient être identiques et ne le sont pas.
Ai-je mal compris l'utilisation de la fonction setValue ?
merci :)
je me trouve face à un problème que je ne m'explique pas avec la fonction "setvalue"
voici mon code :
DataTable dat = _data; for (int i = 0; i < dat.Columns.Count; i++) { dat.Rows[0].ItemArray.SetValue(infoPanel.Controls[2 * i + 1].Text,i); MessageBox.Show(infoPanel.Controls[2 * i + 1].Text + " : " +dat.Rows[0].ItemArray.GetValue(i).ToString()); }
en gros je lui dit de mettre un élément "infoPanel.Controls[2 * i + 1].Text" à la place i.
puis je lui fais afficher
"infoPanel.Controls[2 * i + 1].Text : l'élément en position i"
et en l'occurence la fonction setvalue n'a rien fait puisque ces deux valeurs devraient être identiques et ne le sont pas.
Ai-je mal compris l'utilisation de la fonction setValue ?
merci :)
2 réponses
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
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 :)
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...