[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   -
Bonjour,

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

Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
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 :
                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
0
Laraannain Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   15
 
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 :)
0
Reivax962 Messages postés 3672 Date d'inscription   Statut Membre Dernière intervention   1 011
 
En fait, tu pourrais résoudre ton problème en utilisant des ItemArray, comme ceci :
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...
0
Laraannain Messages postés 109 Date d'inscription   Statut Membre Dernière intervention   15
 
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 ;-)
0