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

Accès aux données Discussion :

[ADO.NET][VB.Net]Comment réaliser jointure de 2 DataTables ?


Sujet :

Accès aux données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Par défaut [ADO.NET][VB.Net]Comment réaliser jointure de 2 DataTables ?
    Hello,

    JE voudrais réaliser une jointure de deux Datatables pour afficher ces données dans une Grid. j'y arrive avec le code suivant, mais j'ai des problème de performances assez vite ( +- 2500 records ).

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    ' Create DataViews for the Categories and Products tables.
            Dim catView As DataView = New DataView(myDS.TabEtud, "", "Nom", DataViewRowState.CurrentRows)
            Dim ProdView As DataView
     
            ' Iterate through the Categories table.
            Dim catDRV, prodDRV As DataRowView
     
            For Each catDRV In catView
                'Console.WriteLine(catDRV("Nom"))
     
                ' Create a DataView of the child product records.
                ProdView = catDRV.CreateChildView(myDS.Relations("FK_TabEtud_TabCour"))
                ProdView.Sort = "brol"
     
                For Each prodDRV In ProdView
                    'Console.WriteLine(vbTab & prodDRV("brol"))
                    Dim rowView As testDataSet.ViewRelationRow = myDS.ViewRelation.NewRow
                    rowView.idEtud = catDRV("idEtud")
                    rowView.Nom = catDRV("nom")
                    rowView.Prenom = catDRV("prenom")
                    rowView.brol = prodDRV("brol")
                    myDS.ViewRelation.AddViewRelationRow(rowView)
                Next
     
            Next
     
            DataGridView1.DataSource = myDS.ViewRelation
    Est ce que quelqu'un aurait une autre solution, ou un moyen pour améliorer les performances ??

    Merci

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Pourquoi ne crées-tu pas une DataRelation directement pour eviter le ForEach
    Exemple à adapter à ton besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     Dim CdsParClient As DataRelation 
     REM :Creer la colonne parent 
     Dim ColPar As DataColumn=Me.ds.Tables("Clients").Columns("IDClient") 
     REM :Creer la colonne enfant 
     Dim ColEnf As DataColumn=Me.ds.Tables("Cds").Columns("IDClient") 
     REM :Creer la relation 
     CdsParClient = New DataRelation("CdsParClient", ColPar, ColEnf) 
     REM :Ajouter la relation au Dataset 
     Me.ds.Relations.Add(CdsParClient) 
     REM :Lier le Datagrid aux données à afficher 
     Me.MonDataGrid.SetDataBinding(ds, "Clients")

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Par défaut
    justement mon problème se situe la, je n'arrive pas à l'adapter à mes besoins.

    Je n'arrive pas afficher une table qui représenterais la relation dans une même grid ...

    Merci

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par prophetky
    justement mon problème se situe la, je n'arrive pas à l'adapter à mes besoins.
    Je n'arrive pas afficher une table qui représenterais la relation dans une même grid ...
    Merci
    C'est donc une exigence de design, car c'est justement ce que fait le code ci dessus, seulement il permet à l'utilisateur de deployer ou pas l'arborescence pour voir le detail des commandes d'un client. Donc pour arriver au resultat que tu souhaites, il faudrait juste après coup forcer le deploiement de toutes les arborescence non

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 113
    Par défaut
    Ouais c est ce que le code que j'ai mis fait, mais l'ennui c est qu'il est peu gourmand en performance...

    Je pense pas qu'il y a une autre solution

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Par défaut
    Citation Envoyé par prophetky
    Ouais c est ce que le code que j'ai mis fait, mais l'ennui c est qu'il est peu gourmand en performance...

    Je pense pas qu'il y a une autre solution
    De toute manière, si dans ton cas le nombre de produits par categorie devient très conséquent en volume, adopte une solution intermediaire qui serait d'associer un ComboBox au Datagrid qui liste toutes les categories et que l'utilisateur puisse en selectionner une à la fois pour affichage du détails, cela limitera déjà le temps de la boucle For Each

    De plus au chargement en adoptant ma solution tu gagnes du temps puisque il ne restera qu'à produire dynamiquement un dataview à aprtir de DataRow.GetChildRows(DataRelation)

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

Discussions similaires

  1. Quel langage entre vb.net c#.net c++.net java ?
    Par heeedi dans le forum Débuter
    Réponses: 7
    Dernier message: 13/12/2008, 21h53
  2. Participez à la F.A.Q .NET ASP.NET Delphi.NET
    Par Jérôme Lambert dans le forum Contribuez
    Réponses: 0
    Dernier message: 05/12/2008, 00h00
  3. Participez à la F.A.Q .NET ASP.NET VB.NET
    Par Jérôme Lambert dans le forum Contribuez
    Réponses: 0
    Dernier message: 05/12/2008, 00h00
  4. Réponses: 3
    Dernier message: 01/12/2006, 20h31
  5. [ADO.Net] Comment réaliser une jointure bindée ?
    Par prophetky dans le forum Accès aux données
    Réponses: 4
    Dernier message: 18/02/2006, 16h17

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