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

Windows Forms Discussion :

[VB.NET][ADO]Fusionner des dataTables [FAQ]


Sujet :

Windows Forms

  1. #1
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut [VB.NET][ADO]Fusionner des dataTables
    Bonjours,

    Voici mon soucis, j'ai une classe avec une méthode qui renvoit une dataTable. Ce que je voudrais faire, c'est pouvoir appeller plusieurs fois cette méthode et fusionner les résultats dans un même dataTable, pour m'en servir ensuite comme source de données pour un datagrid.

    J'ai bien trouvé une méthode ImportRow sur les dataTables, mais ça me fait un peu peur de devoir boucler sur un dataset pour récupérer les rows 1 à 1 et alimenter ainsi la dataTable qui me servira pour l'affichage.

    Vu que le cadre de mon application est un développement web cette méthode ne me plait pas trop Auriez vous une suggestion ?

  2. #2
    Expert éminent
    Avatar de bidou
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2002
    Messages
    3 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 055
    Points : 7 962
    Points
    7 962
    Par défaut
    Oui mon petit canari des bois.

    Tu fais
    Dataset.Merge(DataTable)
    Si ta table possède une colonne de clé primaire identique à la table du dataset, il y aura écrasement des valeurs de lignes par les lignes entrantes ayant la même clé.

    Toi content

  3. #3
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Citation Envoyé par bidou
    Oui mon petit canari des bois.


    Tu fais
    Dataset.Merge(DataTable)
    Si ta table possède une colonne de clé primaire identique à la table du dataset, il y aura écrasement des valeurs de lignes par les lignes entrantes ayant la même clé.
    ok impec, enfin je trouve que c'est assez zarbe de devoir créer un dataset juste pour faire une fusion, je cherchais plutot du coté de la dataTable, créer un dataset pour y mettre une seule dataTable dedant pour fusionner, j'ai l'impression que ça fait bidou-ille

    j'ai aussi trouvé ça sur le sujet : ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.1036/cpref/html/frlrfsystemdatadatasetclassmergetopic3.htm

    Toi content
    oui


  4. #4
    Expert éminent
    Avatar de neo.51
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    2 663
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 663
    Points : 6 418
    Points
    6 418
    Par défaut
    Petite précision, il faut que les datatable que l'on merge aient le même

    Si on ne spécifie pas le tablename lors de la création du datatable, lors du merge on aura une nouvelle table qui s'ajoutera dans la dataset.

  5. #5
    Expert éminent
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Points : 9 634
    Points
    9 634
    Par défaut
    Parrain et parrain, vous savez pas me dire pourquoi j'y arrive pas à faire ca avec ce code?:

    En gros j'ai une function qui renvoie une DataTable dont un extrait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            ds.Tables(0).PrimaryKey = New DataColumn() {ds.Tables(0).Columns(0)}
            ds.Tables(0).TableName = "Transfers_Packets"
    Le TableName correspond, la PrimaryKey est bien définie pour chacune des deux DataTable (même fonction, juste un paramètre qui change en fait).

    D'ailleurs si j'affiche le contenu des DataTables, c'est correct, idem pour le nom et l'ID.

    J'ai donc ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        Private Function MergeTables(ByVal dt1 As DataTable, ByVal dt2 As DataTable) As DataTable
            Dim ds As New DataSet
            ds.Merge(dt1)
            ds.Merge(dt2)
            Return ds.Tables(0)
        End Function
    J'ai cherché avec tous les paramètres possibles et imaginables mais j'ai toujours un résultat erroné:

    J'obtiens un truc du genre "ID1 Val1Dt2 ID1 Val1Dt2", même pas le Val1Dt1...

    Je voudrais partir en we et euh, ca commence à se rapprocher,

    Didier Danse

    Most Valuable Profesionnal SharePoint
    Microsoft Certified Application Developer
    Mes articles sur developpez.com
    Mon site perso


  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par Ditch
    la PrimaryKey est bien définie pour chacune des deux DataTable (même fonction, juste un paramètre qui change en fait).
    De quel paramètre tu parles stp, le champs commun doit être absolument identique dans les 2 tables à fusionner de cette manière(Nom,type), celà n'a aucune importance que ce soit une primarykey d'ailleurs çà peu aussi une cle etrangère pour l'autre table
    http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconmergingdatasetcontents.asp
    sinon on ne parle plus de fusion mais bien d'une union de tables identiques et il faut utiliser autrechose que Merge
    Désolé si j'arrives en retard, j'ai pas été fort présent aujourdhui sur le forum
    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
    16
     
    Private Function MergeTables(ByVal dt1 As DataTable, ByVal dt2 As DataTable) As DataTable 
     Dim dt As DataTable 
     dt = table1 
     Dim maligne As DataRow 
     Dim ligne As DataRow 
     For each ligne in dt2.Rows
       maligne = dt.NewRow() 
       Dim i As Integer 
       For i = 0 to dt.Columns.Count-1 
         maligne(i) = ligne(i) 
       Next
       dt2.Rows.Add(maligne) 
     Next 
     Return dt2
    End Function
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

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

Discussions similaires

  1. Fusionner des DataTables
    Par Krustig dans le forum C#
    Réponses: 3
    Dernier message: 04/06/2009, 09h49
  2. [B.NET][ADO.NET] Créer des composants à la volée
    Par DotNET74 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/12/2007, 15h31
  3. [c#][ADO.net] INTERSECT entre 2 DataTables
    Par lordnecron dans le forum Accès aux données
    Réponses: 2
    Dernier message: 23/02/2007, 09h45
  4. [ADO.Net][VB.NET] Comment copier des données entre deux BDD différentes ?
    Par maddog2032 dans le forum Accès aux données
    Réponses: 6
    Dernier message: 06/06/2005, 11h01

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