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

ADO.NET Discussion :

Colonne liée à une autre DataTable


Sujet :

ADO.NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Colonne liée à une autre DataTable
    Bonjour à tous,

    Je vous expose mon problème schématiquement, j’ai 2 DataTable dans mon DataSet qui sont liées par une relation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Table1 :
    ID [PrimaryKey]
    Field_Table2_ID [ForeignKey]
    Field1
    Field2
    …
    
    Table2 :
    ID [PrimaryKey]
    Field1
    Field2
    J’aimerais ajouter une colonne read-only dans ma DataTable Table1 qui affiche Table2.Field1. L’intérêt est de pouvoir garder la gestion automatique des CommandUpdate, CommandInsert et CommandDelete dans Table1et de pouvoir afficher le champ Table2.Field1 en lecture seul dans un DataGridView.

    J’ai essayé avec la propriété Expression de ma nouvelle colonne dans Table1:
    Parent(relation).Field1

    Mais ça ne fonctionne pas (je vous cacherais pas que j'ai essayé pas mal de variante, et j'ai essayé aussi avec la propriété Source)…

    Merci d’avance pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Il faut que tu crées une relation entre les deux tables comme suit :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataRelation rel = new DataRelation ( "Rel", "Table2", "Table1", new string[] { "ID " }, new string[] { "Field_Table2_ID" }, false );
    table2.ParentRelations.Add ( rel );

    Si cette relation est établie tu pourras par la suite configurer ton DataGridView pour afficher le champ Field1 de ta table Table1.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Merci pour ta réponse h2s84.

    Les deux tables sont déjà liées dans le DataSet. La colonne de Table1 accepte bien l'expression Parent(Table2Table1Relation).Field1 mais lorsqu'on regarde un aperçu des données (je bosse dans le Designer), il n'y a rien.

    En clair, j'aimerais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Table2.Field1 FROM Table1 INNER JOIN Table2 ON Table1.Table2_Field1_ID = Table2.ID
    dans la nouvelle colonne de Table1.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Je ne comprend pas alors ton problème.
    Il s'agit d'un problème de récupération de la valeur Table1.Field1 dans une colonne de ta DataGridView c'est ça ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Dans un cas simple:
    - on a une base de donnée avec une table Table1;
    - on crée un DataSet qui définit une DataTable DataTable1;
    - on charge DataTable1 dans un DataGridView avec un DataAdapter.

    L'avantage est que le requête de mise à jour de la base de donnée sont crées automatiquement dans ce cas là.

    Mon problème est que je veux garder cette simplicité mais avec des tables liées. L'idée est que comme on aura pas à modifier les valeurs qui sont dans la table liée, on ajoute une colonne dans la table de base qui affiche simplement les valeurs de la table liée.

    Prenons un cas plus concrêt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Salarié
    ID
    Type_Salarié_ID
    Nom
    Prénom
    
    
    Type_Salarié
    ID
    Désignation
    Dans mon DataGridView, je veux afficher Nom, Prénom, Type_Salarié. Je peux crée dans mon DataSet par exemple un DataAdapter avec toutes ces informations, mais dans ce cas, je dois coder moi même les requêtes INSERT, COMMAND et UPDATE car les tables sont liées. Mon idée est donc d'ajouter une colonne Type_Salarié dans la DataTable Salarié, de la mettre en lecture seule et de définir une Expression: Parent(SalariéType_Salarié).Désignation.
    Dans mon DataGridView, je garde la mise à jour auto du cas simple pour Nom et Prénom et je peux afficher en lecture seul Type_Salarié.

    J'espère que c'est plus clair

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Mon problème est bien de savoir pourquoi l'expression ne fonctionne pas et éventuellement de connaître une alternative (autre que celles citées). Je re précise au cas où

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/10/2011, 20h21
  2. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  3. Héritage avec tables liées à une autre base
    Par b_steph_2 dans le forum Access
    Réponses: 13
    Dernier message: 27/02/2007, 11h17
  4. Réponses: 1
    Dernier message: 10/05/2006, 15h01
  5. Griser 1 liste déroulante liée à une autre, pb de concaténat
    Par linou dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 29/03/2005, 16h45

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