Changer valeur item dans datatable

Résolu
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 6 mars 2008 à 20:43
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 - 8 mars 2008 à 08:10
Bonjour,

J'ai une datatable remplie par un query, cette DT est datasource d'un combo

J'essaye de changer la valeur d'un item de cette table

dtt.Rows[i].ItemArray[1] = addrID;

Je n'ai pas d'erreur, mais rien ne se passe
addrID est un int

Quelle est l'erreur ?

5 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
8 mars 2008 à 01:46
Salut,

Plus précisément ItemArray n'est pas une "vue" mais plus une extraction des données "brutes" sous forme d'un tableau.
Bref :
dtt.Rows[i].ItemArray[1] =  addrID;
1) dtt.Rows[i] : obtention du DataRow
2) ...ItemArray : obtention du tableau
3) ...[1] =  addrID; : modification de la valeur dans le tableau

Et derrière, on ne fait rien du tableau, donc forcément.

Par contre dtt.Rows[i][1] =  addrID;
n'est rien d'autre que l'utilisation de la propriété Item, qui agit sur chaque valeur directement : on se sert du code de la classe DataRow, pas de celui de la classe Array.

Naturellement comme la propriété ItemArray est en lecture/écriture, et comme le dit la doc, elle peut quand même servir à la modification des valeurs.
Basiquement :
Object[] itemsArray = dtt.Rows[i].ItemArray;
itemsArray[0] = ...;
itemsArray[1] = addrID;
itemsArray[2] = ...;
...
dtt.Rows[i].ItemArray = itemsArray;

/*
coq
MVP Visual C#
CoqBlog
*/
3
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
7 mars 2008 à 09:03
Salut

Et bien non !
Pas tu tout

Ce que je disais c'est que quand j'essaye d'assigner  ma valeur

 dtt.Rows[i].ItemArray[1] =  addrID;

Rien ne se passait
En fait, l'erreur vient du mode d'adressage, en réalité pour VRAIMENT acceder à la valeur, il faut faire :

 dtt.Rows[i][1] =  addrID;

ItemArray n'est qu'une "vue" sur l'item ce n'est pas un pointeur sur celui-ci
AcceptChange ne doit intervenir que bien plus tard et selon moi APRES l'exploitation des changements sans un update pour precisément signaler que les changements ont été traités que l'on repart sur une situation fraiche
1
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
7 mars 2008 à 08:54
Salut,

Il faut peut que tu acceptes les modifications

dtt.AcceptChanges();

Ce mécanisme permet à la méthode Update
de savoir quelles lignes ont été modifiées et n'envoyée que c'est derniere en base de données
mais des fois si tu n'utilises pas le principe, il faut utilisée acceptChanges()

MSDN (quelques explications et tu as le rowstate pour expliquer aussi)

Bon courage
0
nhervagault Messages postés 6063 Date d'inscription dimanche 13 avril 2003 Statut Membre Dernière intervention 15 juillet 2011 37
7 mars 2008 à 16:28
salut,

J'ai tenté et j'ai perdu c'est pas grave, du moment que tu es trouvé la solution.

Tu peux donc valider ton psot ;-)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
olibara Messages postés 666 Date d'inscription dimanche 16 décembre 2007 Statut Membre Dernière intervention 11 mars 2010 6
8 mars 2008 à 08:10
Ouais !

Bon a garder en tete

Mais c'est quand meme un peu tripoteux
L'intéret est sans doute limité a des cas un peu spéciaux.
0
Rejoignez-nous