olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 2010
-
6 mars 2008 à 20:43
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 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
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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;
olibara
Messages postés666Date d'inscriptiondimanche 16 décembre 2007StatutMembreDernière intervention11 mars 20106 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
nhervagault
Messages postés6063Date d'inscriptiondimanche 13 avril 2003StatutMembreDernière intervention15 juillet 201137 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)