krimog
Messages postés1860Date d'inscriptionlundi 28 novembre 2005StatutMembreDernière intervention14 février 201549 22 juil. 2009 à 10:38
Salut
En effet, il ne fait qu'une référence, donc DrSave et Dr sont le même objet (pas 2 objets identiques).
Il va donc te falloir créer une méthode qui permette de copier une à une les données de ton DataRow. Le problème est que, dans mes souvenirs, il n'est pas possible de créer un new DataRow();
Cependant, un DataRow correspond juste à un tableau d'objects
Tu peux donc faire quelque chose du genre :
object[] DrSave = new object[Dr.ItemArray.Length];
for (int i = 0; i < Dr.ItemArray.Length; i++)
{
DrSave[i] = Dr.ItemArray[i];
}
Logiquement (je n'ai pas testé), ça devrait marcher.
Krimog : while (!(succeed = try())) ; - NON, "LE BAR" n'est PAS un langage de programmation ! -
alexbesn
Messages postés21Date d'inscriptionjeudi 23 avril 2009StatutMembreDernière intervention 4 août 2009 23 juil. 2009 à 16:57
C'est ce que j'ai fais (enfin dans l'idée).
Il faut juste remplacer ta 1ère ligne parce quelque chose du style :
DrSave = Ds.Tables["matable"].NewRow();
(où Ds est mon Dataset) pour créer le schéma de la datarow, sinon tu ne peux pas manipuler le tableau de valeurs.
Après tu peux faire le for avec le tableau d'items pour recopier les valeurs.
Le but en fait était de vérifier si les lignes Dr et DrSave sont différents plus tard dans le programme en faisait :
if(Dr!=DrSave)
Seulement dans notre cas elles seront toujours différentes car seuls les valeurs sont identiques, mais toutes les petites propriétés des datarows n'ont pas été recopiés et certaines diffèrent.
Donc pour tester si les lignes sont identiques, j'ai crée la fonction suivante qui permet de vérifier que deux Datarow sont différentes en comparant les valeurs :
private bool CompareLesDr(DataRow Dr1, DataRow Dr2)
{//Permet de trouver des différences entre les datarow (on ne peut pas comparer directement les datarows car seuls les données sont recopiées et pas les propriétés par exemple donc elles seront toujours différentes)
//On parcourt toutes les données des datarow
for (int i = 0; i < Dr1.ItemArray.GetLength(0); i++)
{
if (Dr1[i].ToString() != Dr2[i].ToString()) //S'il y a une différence alors la fonction l'indique
return true; //Elle retourne vrai
}
return false; //Sinon elle retourne faux
}
Et ça fonctionne. Mais bon c'est du bricolage quand même.