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 2 datagridview


Sujet :

VB.NET

  1. #1
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut Lier 2 datagridview
    Bonjour,

    je me familiarise petit à petit à VB.NET, mais voici un problème pour lequel je sollicite votre aide :

    j'ai un premier datagridview qui me sert à saisir un certains nombre d'opérations de production (exemple : 10-Fraisage, 20-Tonnelage, 30-Polissage, 40-Placage, ...)

    Pour chacune de ces opérations (donc chaque ligne du datagridview) je veux pouvoir saisir dans un second datagridview la liste des outils et fournitures nécéssaires. Les données saisies dans le second datagridview doivent donc être liées à une ligne du premier datagridview.

    Et je ne sais pas comment faire ça. Je sais comment faire un binding d'une zone de text par rapport à un datagridview, mais binding d'un datagridview avec un autre datagridview je sèche.

    Cela dit, si vous voyez une autre solution, je suis preneur.

    Merci à vous.

  2. #2
    Membre éclairé Avatar de grrrkewel
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 72
    Par défaut
    bonjour,
    tu as essayé avec une base de données :
    une table contenant tes "10-Fraisage, 20-Tonnelage, 30-Polissage, 40-Placage, ..."
    et une autre contenant tes détails : "liste des outils et fournitures nécessaires"
    après tu as juste à lier vb et acces, et à faire des opérations sur ta database...

  3. #3
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    Hé bien en fait je travaille avec une base SQL SERVER. Et mes 2 controles DataGridView sont reliés à des DataTable que j'alimente à partir de ma BD.

    Mais ce n'est pas ça le problème. Imagine ces 2 tableaux. Dans le premier je saisis mes opérations. Ensuite, en cliquant sur chaque opération je dois voir (et aussi je dois être capable de rajouter) dans le second tableau les fournitures de l'opération active.

    Donc ça nécessite que les 2 tableaux soient liés, et qu'ils conservent tout le contenu de ma session de saisie, avant que je décide d'enregistrer les modifications dans la base.

    En gros je dois pouvoir à la fois renseigner le tableau des opérations, et aussi celui des fournitures, mais d'enregistrer l'ensemble des modifs en une seule fois.

    Je sais pas si je suis clair, c'est vrai que moi je suis plongé dedans mais c'est pas facile d'expliquer le comportement attendu...

  4. #4
    Membre éclairé Avatar de grrrkewel
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    72
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 72
    Par défaut
    effectivement je ne saisi pas très bien le principe...

  5. #5
    Membre Expert Avatar de Danyel
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2005
    Messages
    1 699
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 699
    Par défaut
    J'ai pas tres bien compris aussi, mais je pense que lier les 2 dgv sur la meme bdd doit etre possible et realisable.

  6. #6
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    Ok je vous déroule un cas d'emploi :

    dgv A : les opérations
    dgv B : les fournitures d'une opération

    A était vierge. Dans A je saisis :

    10|Fraisage| 0.75€
    20|Tonnelage|0.10€
    30|Polissage|1.10€
    40|Placage|2.70€

    Je clique sur l'opération 10 de A. Dans B sont chargées les fournitures nécéssaires à l'opération 10. Mais comme cette opération est nouvelle, il n'y a pas encore de fournitures pour cette opération. B est donc vierge. Je saisis :

    Barre Laiton diamètre 12|0.23 m
    Fraise X4J133|1 pc

    J'ai encore d'autres fournitures à renseigner pour les autres opérations donc je n'enregistre pas encore mes modifs.

    Je clique sur l'opération 20, et là normalement je m'attends à ce qu'il m'affiche dans le tableau B les fournitures de l'opération 20. Libre à moi de rajouter des fournitures, d'en enlever, ...

    En recliquant sur la ligne 10, je souhaite retrouver les informations que j'ai saisies auparavant, bien que ne les ayant pas enregistrées dans la base.

    Voilà le comportement souhaité.

    Enfin, j'ai un bouton ENREGISTRER qui me sert à sauvegarder mes opérations et les fournitures spécifiées pour chacune d'entre elles...

    Ca vous parait plus clair ?

  7. #7
    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,
    Tu as donc une table parent(opérations) et une table enfant(fournitures).
    Dans le dataset il faut créer une relation entre les 2 tables
    DGV=datagridview
    Voici un petit exemple avec un datagridview, j'utilise une vue pour filtrer les enregistrements, mais avec une table ça marche aussi.(bsParent.datasource = dataset.table)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    'Créer la vue parent et la lier à son bindingsource
    DTAVParent = New DataView
        DTAVParent.Table = Dataset.TableParent
        BSParent = New BindingSource
        BSParent.DataSource = DTAVParent
    'Créer le bindingsource enfant qui est lié au BS parent au travers de la relation
        BSEnfant = New BindingSource
        BSEnfant.DataSource = BSParent
        BSEnfant.DataMember = "Nom de la relation table parent-enfant"
        DGVParent.DataSource = BSParent
        DGVEnfant.DataSource = BSEnfant
    Normalement un clik sur le dgv parent affiche les enregistrements liés(du moins dans mon programme ça fonctionne).
    Bon boulot jean

  8. #8
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    Bonjour,

    désolé de répondre seulement maintenant mais je ne recevais pas les alertes et je rentre de vacances...

    JPelli, je suis content d'apprendre qu'une solution existe (celà dit je n'en doutais pas, normalement tout est possible) mais je ne comprends pas comment tu procède.

    On dirait que les 2 DataGridView sont liés par des BindingSource à la même DataTable. Donc la DataTable devrait-elle contenir les opérations multipliées par les fournitures, c'est à dire quelquechose du genre :

    Op1|NomOp1|Fourniture1Op1
    Op1|NomOp1|FourniturenOp1
    ...
    Opm|NomOpm|Fourniture1Opm
    Opm|NomOpm|FourniturenOpm

    Voilà, j'ai beaucoup de mal à mettre en oeuvre le fait qu'un ensemble d'enregistrements d'un datagridview est rattaché à une ligne d'un autre datagridview.

    Peux-tu détailler un peu plus ton exemple, parce que là je suis perdu. Et aussi me dire ce qu'est "Nom de la relation table parent-enfant" ? C'est défini quelquepart, je mets ce que je veux, ou bien c'est un nom de champ ?

    Merci

  9. #9
    Membre éclairé Avatar de droliprane
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2005
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2005
    Messages : 710
    Par défaut
    Bonjour j'ai la solution.

    gamme et fournitures sont des DataGridView.
    GammeDT et FournituresDT sont les DataTable associés à ces DataGridView.


    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    Private Sub loadGamme()
     
     
            Dim masterBindingSource As New BindingSource()
            Dim detailsBindingSource As New BindingSource()
     
            gamme.DataSource = masterBindingSource
            fournitures.DataSource = detailsBindingSource
     
            Dim Sql As String
            Dim Rs As ADODB.Recordset
            Dim aid As Integer
            Dim data As DataSet
     
            aid = article.SelectedValue
     
            ConnectBD(Conn)
     
            GammeDT.Rows.Clear()
            Rs = New ADODB.Recordset()
            Sql = "SELECT * FROM gam WHERE gam_article = " & aid & " ORDER BY gam_op;"
            Rs.Open(Sql, Conn)
            If Not Rs.EOF Then
                Do While Not Rs.EOF
                    GammeDT.Rows.Add(Rs("gam_article"), Rs("gam_op").Value, Rs("gam_op_designation").Value, Rs("gam_op_detail").Value, Rs("gam_cout_piece").Value, Rs("gam_op_mere").Value)
                    Rs.MoveNext()
                Loop
            End If
            Rs.Close()
     
     
            FournituresDT.Rows.Clear()
            Sql = "SELECT * FROM nmcl, art WHERE nmcl_fourniture = art_id AND nmcl_article = " & aid & " ORDER BY nmcl_fourniture;"
            Rs.Open(Sql, Conn)
            If Not Rs.EOF Then
                Do While Not Rs.EOF
                    FournituresDT.Rows.Add(Rs("nmcl_article"), Rs("nmcl_op").Value, Rs("nmcl_fourniture").Value, Rs("nmcl_qte_lien").Value)
                    Rs.MoveNext()
                Loop
            End If
            Rs.Close()
     
            DeconnectBD(Conn)
     
     
            data = New DataSet()
            data.Tables.Add(GammeDT)
            data.Tables.Add(FournituresDT)
     
            Dim GammeColumns() As DataColumn
            Dim FournituresColumns() As DataColumn
     
            GammeColumns = New DataColumn() {GammeDT.Columns("ARTICLEID"), GammeDT.Columns("OP")}
            FournituresColumns = New DataColumn() {FournituresDT.Columns("ARTICLEID"), FournituresDT.Columns("OP")}
     
            Dim relation As New DataRelation("FournituresOperation", GammeColumns, FournituresColumns)
            data.Relations.Add(relation)
     
            masterBindingSource.DataSource = data
            masterBindingSource.DataMember = GammeDT.TableName
     
            detailsBindingSource.DataSource = masterBindingSource
            detailsBindingSource.DataMember = "FournituresOperation"
     
        End Sub
    J'ai pas commenté le code, mais bon ça peut aider quelqu'un quand meme...

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

Discussions similaires

  1. lier un datagridview avec un tableau
    Par kelvir dans le forum C#
    Réponses: 3
    Dernier message: 20/05/2010, 17h17
  2. DataTable lier au DataGridView et filtre
    Par matrix_ceg dans le forum Windows Forms
    Réponses: 9
    Dernier message: 17/05/2008, 19h12
  3. (debutant) lier 2 datagridview
    Par felin86 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/03/2008, 21h38
  4. lier le contenu d une liste a un Datagridview
    Par Slumpy dans le forum VB.NET
    Réponses: 9
    Dernier message: 18/02/2008, 16h36
  5. [DataGridView] Comment lier un DataSet ?
    Par Ticoche dans le forum Windows Forms
    Réponses: 7
    Dernier message: 17/12/2007, 10h32

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