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 :

Lier la source d'un DataGridView à un autre DataGridview. [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut Lier la source d'un DataGridView à un autre DataGridview.
    Bonjour,

    Dans un form, j'ai 2 DataGridView (DG1 et DG2)
    DG1 affiche le contenu d'une table T1 (en fait c'est une requête mais je simplifie pour l'exposé)
    DG2 affiche le contenu d'une table T2
    T1 et T2 sont liés par une relation de 1 à plusieurs ; le but est que chaque ligne de DG1 sélectionnée provoque l'affichage des enregistrements correspondants de T2 dans DG2

    A l'initialisation, j'affecte une source à DG1 et DG2 comme ceci


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Me.T1TableAdapter.Fill(Me.BaseDataSet.T1)
    Me.T2TableAdapter.Fill(Me.BaseDataSet.T2)
     
    'Les objets suivants ont été créés et nommés par le designer de Visual Studio automatiquement :
    '- T1TableAdapter (idem pour T2)
    '- BaseDataSet
    '- T1 et T2
     
    DG1.DataSource = Me.BaseDataSet.T1
    With DG2.
    .DataSource = Me.BaseDataSet.T2
    .DataMember = "T1 - T2" 'nom de la relation entre TA et T2 telle que je l'ai indiquée dans l'onglet .xsd qui représente les tables et leurs relations
    Ca marche bien sauf que...

    En cours de code, le DataSource de mon DG1 est amené à évoluer comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim commande As New SQlCeCommand(SQLmodifiée, connexion)
    Dim ad as New SQLCeDataAdapter(commande)
    Dim MonDS As New Dataset
    Try
    ad.Fill(MonDS, "table") ' où "table" est le nom d'une de mes tables
    Me.DG1.DataSource = MonDS.Tables("table")
    A partir de ce moment-là, mon DG2 ne suit plus (son affichage reste figé à ce qu'il y avait avant modification de la source de DG1) et je ne sais pas comment le mettre à jour pour qu'il continue à remplir sa fonction.

    Qqun peut-il me dépanner ?

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    le but est que chaque ligne de DG1 sélectionnée provoque l'affichage des enregistrements correspondants de T2 dans DG2
    Si la table T2 est de taille limitée (moins de 100 000 enregistrements), on peut envisager de la charger totalement au départ et de la lier à DG2 via un bindingSource BS2.
    On utilisera l'event RowEnter de DG1 afin de mettre à jour la propriété Filter du bindingSource pour n'afficher qu'une partie de T2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BS2.Filter = FieldName2+"="+FieldValueDeducedFromDG1Row ;

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    Si la table T2 est de taille limitée (moins de 100 000 enregistrements)
    C'est bien mon cas.

    Tu veux dire qqch comme ça ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim RéférenceActive as Integer
     
    'La première colonne de DG1 contient le champ de liaison de T1 avec T2. C'est un compteur. Il s'appelle "Référence"
    ' Je récupère la valeur de Référence actif dans DG1
     
    RéférenceActive = Me.DG1.CurrentRow.Cells(0).Value
     
    'dtv_T2 est le dataview de T2
    Me.dtv_T2.RowFilter = "Référence = " & RéférenceActive
    Me.DG2.DataSource = Me.dtv_T2

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Pas vraiment, ce serait du genre (n'utilisant pas VB.NET mais C#, je ne suis pas sur de la syntaxe):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim Bs2 as New BindingSource()
    Bs2.DataSource = Me.dtv_T2
    Me.DG2.BindingSource = Bs2
    ...
    Bs2.Filter = "Référence = " & RéférenceActive

  5. #5
    Membre éclairé
    Inscrit en
    Juillet 2013
    Messages
    777
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 777
    Par défaut
    J'ai un pb avec cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Me.DG2.BindingSource = Bs2
    Il n'existe pas de propriété "BindingSource" pour les DataGridView...

  6. #6
    Membre Expert Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Par défaut
    Et Me.DG2.DataSource = Bs2 ?

    C'est à dire que tu définis ton binding comme DataSource de ton DataGridView, ça doit être l'idée première de Graffito.

    Un petit peu de recherche sur le bindingsource évoqué par Graffito t'aurait apporté la solution.

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

Discussions similaires

  1. Comment lier les sources d'une lib à son nom ?
    Par nutzzz dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 20/09/2007, 09h51
  2. Réponses: 62
    Dernier message: 05/07/2006, 13h48
  3. lier un .exe à des dll dans un autre emplacement
    Par Husqvarna dans le forum Général Dotnet
    Réponses: 3
    Dernier message: 19/04/2006, 10h53
  4. [FLASH 8] Copier une source d'un projet à l'autre
    Par iceman2001 dans le forum Flash
    Réponses: 12
    Dernier message: 06/03/2006, 10h52
  5. Réponses: 3
    Dernier message: 14/02/2006, 21h26

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