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

VB.NET Discussion :

[Vb.Net]_DataGridView, DataSet, DataRelation ?


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut [Vb.Net]_DataGridView, DataSet, DataRelation ?
    Bonjour,

    J'ai une application avec une base access contenant deux tables (pour simplifier)
    TblVehicule (Id, Immatriculation, .... Id_TblMarque)
    TblMarque (Id, Marque)

    Au chargement de mon formulaire, je charge les deux tables dans un DataSet déclaré en Private du formulaire.
    Dans le formulaire, j'ai un DataGridView dans lequel j'affiche la table TblVehicule.
    Seulement la colonne ID_TblMarque affiche une valeur numérique et non la marque corrspondante. Jusque là je comprend l'erreur.
    J'ai donc recherché du côté des DataRelations et j'ai créé une relation ParentEnfant.

    (J'ai développé mon application avec une architecture 3 couches (Sa m'a pris du temps, mais c'est rudement appréciable !! ).
    ClMarque est ma classe représentant les Marques,
    ClVehicule est ma classe représentant les Vehicules, ....
    Cette partie fonctionne bien, les tables sont chargées correctement, les noms des colonnes sont repris ....
    dans la table TblVehicule, la colonne Id_TblMarque,de la table de la base Access, est renommé Marque)


    Le code créant la relation
    Code vb.net : 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
     
    Private Sub TestRelationTable()
     
            ' Ajout de la table Vehicule
            ' Table chargée au chargement du formulaire
            ' Existe bien dans le DataSet
     
            ' Ajout de la table Marque
            clMarque.ChargerTs(objDataSet)
     
            ' Réalisation de la relation
            Dim ColParentMarque As DataColumn
            ColParentMarque = objDataSet.Tables("TblMarque").Columns("ID_Marque")
     
            Dim ColEnfantVehicule As DataColumn
            ' "Marque" représente Id_TblMarque, colonne renommée
            ColEnfantVehicule = objDataSet.Tables("TblVehicule").Columns("Marque")
     
            Dim RelationParentEnfant As DataRelation
            RelationParentEnfant = New DataRelation("relMarqueVehicule", ColParentMarque, ColEnfantVehicule)
     
            objDataSet.Relations.Add(RelationParentEnfant)
     
            Me.dgvVehicule.DataSource = objDataSet.Tables("TblVehicule")
     
        End Sub

    Après l'exécution du code la colonne Marque contient toujours les valeurs numériques....

    D'ou vient le problème ?

    Merci du coup de main

    Gwendal

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Par défaut
    Bonjour,
    Un datagridview(DGV) affiche les données d'une table.
    S'il existe une relation parent/enfant le DGV affiche la table parent et la table enfant est visible en cliquant sue la croix à gauche de la ligne.
    Pour afficher sur la même ligne les enregistrements de 2 tables il faut utiliser la propriété expressions d'une table.
    en bref

    1 créer une table reprenant les colonnes de la table enfants
    2 ajouter les colonnes de la table parent
    3 pour ces colonnes préciser comme expression : parent(NonDeLaRelation).NomDeLaColonneDeLaTableParent
    4 relier la table au DGV

    La valeur de la colonne expression doit être unique, la relation parent/enfant doit être 1àplusieurs ou alors il faut rendre cette valeur unique.

    Autre solution créer une requête qui retourne les colonnes à afficher et charger une table qui sera liée au DGV.
    Bon boulot
    Si tu as besoin d'autres explications ou exemples n'hésite pas à demander.
    Jean

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    salut,

    Merci, mais ....
    Je rencontre pas mal de problèmessss... Un exemple serait le bien venu...
    Bizarrement parent n'a pas de contructeur ?


    Gwendal

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 374
    Par défaut
    Bonjour
    Avec le concepteur
    crée une nouvelle table T
    Ajoute les colonnes de la table enfant E
    ajoute des colonnes pour les champs de la table parent P
    ex. champs enfant E1, E2, E3
    champs parents P1,P2
    tu as une table avec les colonnes E1, E2, E3, P1, P2
    Toujours dans le concepteur affiche les propriétés de la colonne P1
    Dans expresssion de la colonne P1 entre le nom du champ de la table parent sous le format Parent(NomdeLarelation).NomDuChampDeLaTableParent
    idem pour P2

    Dans le code charge les tables P et E
    Charge la table T avec les enregistrements de la table E dans l'exemple les 3 colonnes E
    les colonnes P1 et P2 se chargent automatiquement à travers la relation

    Le mot parent fait partie de l'expression
    Pour Ajouter les colonnes P1, P2 dans le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DS.T.Columns.add("NomCol",typeof(string),"Parent(NomDeLaRelation).P1")
    idem pour P2

    Cherche aussi dans l'aide sur les datacolumn
    Bon boulot
    Jean

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    291
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 291
    Par défaut
    Merci !

    Gwendal

    PS: Mettre GetType(String) à la place de TypeOf(String)

  6. #6
    Membre éclairé
    Inscrit en
    Août 2006
    Messages
    381
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 381
    Par défaut
    Bonjour,

    j'ai essayé de réaliser l'exemple donné mais une exception est levée m'indiquant que la relation n'existe pas.
    Je suppose qu'il faut ajouter la table T au DataSet. C'est ce que j'ai fait avec l'instruction:

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    using (DataTable myDataTable = new DataTable("Details"))
    {
           myDataSet.Tables.Add(myDataTable);
     
           myDataTable.Columns.Add("Colonne1", typeof(string), "Parent(MaRelation).MaColonneP1");
           myDataTable.Columns.Add("Colonne2", typeof(string));
    }

    La relation existe au sein du DataSet myDataSet entre la table parent et la table enfant.

    Merci de votre aide.

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

Discussions similaires

  1. [VB.NET]datagrid/dataset et hyperlink ?!
    Par skoozy dans le forum Windows Forms
    Réponses: 1
    Dernier message: 15/05/2006, 13h16
  2. [ADO.Net][C#/DataSet] Comment différer l'exécution de méthodes ?
    Par Invité dans le forum Accès aux données
    Réponses: 4
    Dernier message: 26/04/2006, 16h14
  3. [VB.NET] Mon dataset me génère un message d'erreur
    Par Herlece dans le forum Windows Forms
    Réponses: 5
    Dernier message: 04/04/2006, 13h56
  4. [VB.NET] DataReader DataSet
    Par mikolirto dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/04/2005, 16h22
  5. Réponses: 4
    Dernier message: 30/03/2005, 18h30

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