IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Comment additionner 2 DataTables ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut Comment additionner 2 DataTables ?
    Bonjour, voila ma situation :

    J'ai une boucle qui remplit un DataSet DS1 avec n enregistrements (vide et re-remplit a chaque passage dans la boucle).

    Je souhaiterai avoir un DataSet DSTOTAL contenant l'addition des enregistrements de DS1.

    En fait j'aimerai bien faire un truc du genre :

    DSTOTAL = DSTOTAL + DS1;

    Comme ca mon DSTOTAL se remplit de plus en plus a chaque passage.

    J'ai essaye :

    foreach(DataSet.Rows MyRow in DS1.Rows)
    {
    DSTOTAL.Rows.Add(MyRow);
    }

    Mais il me dit que MyRow appartient deja a une table....

    Comment additionner des enregistrements de DataTables (sans faire de boucles si possible pour la performance) ?

    Merci d'avance

  2. #2
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Personne ne voit comment ajouter des lignes d'un DataSet dans un autre comme si on faisait :

    DS1.Rows += DS2.Rows

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    On ne peut pas faire passer des DataRow d'une table à une autre comme ça, il faut les recopier...


    Mais à mon avis ton problème se situe à un autre niveau :
    J'ai une boucle qui remplit un DataSet DS1 avec n enregistrements (vide et re-remplit a chaque passage dans la boucle).
    c'est idiot comme fonctionnement ! il suffit d'ajouter le nouvel enregistrement sans vider la table et le tour est joué...
    => pourquoi agis-tu comme ceci ?

  4. #4
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    J'ai besoin de faire comme ca car je me sert de 2 DataSets :

    1 qui est recharge a chaque passage d'une boucle afin de construire la structure d'un TreeView a partir d'une requete sql

    1 qui est l'ensemble des valeurs additionnees dans le premier afin de faire des recherches et des updates par la suite.

    Je vais essayer d'illuster ca :

    DS1 possede Val 1
    Val 2
    Val 3 au premier passage de la boucle

    DS1 possede Val 1
    Val 4
    Val 8 au deuxieme passage de la boucle

    Si je remplit DS1 sans le vider, je creer des erreurs de cle primaire :

    DS1 aurait Val 1
    Val 1
    Val 2
    .
    .
    Val 8

    La portee de DS1 est locale a une methode.

    J'ai besoin de DS2 qui se remplit sans se vider avec les valeurs de DS1 (sans ajouter une ligne qui existe deja comme Val 1)

    DS2 doit avoir : Val 1
    Val 2
    Val 3
    Val 4
    Val 8

    Je pourrai avoir DS1 comme avant et DS2 que je remplit avec une requete generales mais il y a beaucoup de lignes et comme je les charges deja dans DS1, je voulais en profiter pour les copier (sans doublons) dans DS2.

    J'esoere avoir ete clair pcke j'en doute...

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Es-tu vraiment obligé de passer par un DataSet pour remplir ton TreeView ? (je n'ai jamais utilisé de TreeView)

    Je verrais plutôt les choses ainsi :
    - tu récupères les données dans ta base (dans un DataReader je suppose) avec une de tes requêtes sql
    - tu lis chaque enregistrement dans le DataReader et tu copies les données dans le TreeView d'une part, dans le DataSet d'autre part (en vérifiant bien évidemment que la ligne n'y est pas déjà grâce à ta clé primaire)
    - et tu boucles...

    Tu peux montrer un peu ton code, qu'on voie mieux ce que tu fais ?

  6. #6
    Membre éclairé Avatar de Contrec
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations forums :
    Inscription : Mars 2005
    Messages : 597
    Par défaut
    Peut etre que ta solution d'utiliser pour l'un un DataReader et pour l'autre un DataSet en ajoutant les lignes resoudra mon probleme.

    Pour le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    // dS_TestAreaByProgramDevice correspond a mon DS1
    foreach (LMA_DataSets.DS_TestArea.T_TEST_AREARow MyTestAreaRow in dS_TestAreaByProgramDevice.T_TEST_AREA.Rows)
    {
    	// dS_TestAreaTree coorespond a mon DS2
    	if (dS_TestAreaTree.T_TEST_AREA.FindByTEST_AREA_NAME(MyTestAreaRow.TEST_AREA_NAME) == null)
    	{
    		dS_TestAreaTree.T_TEST_AREA.AddT_TEST_AREARow(MyTestAreaRow.TEST_AREA_NAME, MyTestAreaRow.TEST_AREA_PREFIX);
    	}
     
    	// Adds the TestAreas TreeNode
    	Tree.Nodes[MyTechnologyRow.TECHNOLOGY_NAME]
    		.Nodes[MyDeviceRow.DEVICE_NAME]
    		.Nodes.Add(MyTestAreaRow.TEST_AREA_NAME, MyTestAreaRow.TEST_AREA_NAME);
    	}
    }
    Sinon j'avais trouve la methode ImportRow qui peut fonctionner...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 09/02/2007, 18h46
  2. [C#] Comment remplir un DataTable typé avec un DataSet ?
    Par L`artiste dans le forum Accès aux données
    Réponses: 11
    Dernier message: 25/04/2006, 14h56
  3. [C#] Comment trier une DataTable ?
    Par royto dans le forum C#
    Réponses: 2
    Dernier message: 23/03/2006, 01h15
  4. [C#] Comment renvoyer un DataTable ?
    Par ALCINA dans le forum Services Web
    Réponses: 1
    Dernier message: 18/01/2006, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo