Changer valeur item dans datatable [Résolu]

olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 6 mars 2008 à 20:43 - Dernière réponse : olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention
- 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 ?
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 7 mars 2008 à 09:03
3
Merci
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

Merci olibara 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de olibara
Meilleure réponse
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 8 mars 2008 à 01:46
3
Merci
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
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de cs_coq
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 7 mars 2008 à 08:54
0
Merci
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
Commenter la réponse de nhervagault
nhervagault 6069 Messages postés dimanche 13 avril 2003Date d'inscription 15 juillet 2011 Dernière intervention - 7 mars 2008 à 16:28
0
Merci
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 ;-)
Commenter la réponse de nhervagault
olibara 670 Messages postés dimanche 16 décembre 2007Date d'inscription 11 mars 2010 Dernière intervention - 8 mars 2008 à 08:10
0
Merci
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.
Commenter la réponse de olibara

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.