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 :

Relation de 1 à plusieurs dans un form


Sujet :

VB.NET

  1. #1
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut Relation de 1 à plusieurs dans un form
    Bonjour

    j'ai lu avec attention ce tuto :http://dotnet.developpez.com/cours/liaisoncontroles/

    Mais malgré la multiplicité des exemples, je n'ai pas trouvé la réponse à mon cas de figure : J'ai un datagridview qui rassemble les enregistrements d'un DTV (en l'occurence issu d'une requête). Chaque enregistrement de ce DTV est lié à une table T1 par une relation de 1 plusieurs.
    Je voudrais que chaque sélection de ligne (donc d'enregistrement) de mon DatagridView (DTG) se traduise par une mise à jour des champs de ma table T1 (concrétisés par des Textbox) avec un compteur d'enregistrements associé et un bouton permettant de naviguer parmi ceux-ci.

    Comment faire simplement ?

  2. #2
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Bonjour,

    Pas de réponse ? En me relisant, je me dis que ce n'est pas très clair alors je reformule.

    Dans un formulaire j'ai un DTG qui affiche les résultats d'une requête. Cette requête contient un champ "Réf".
    J'ai également dans ce formulaire des textbox qui sont supposés afficher les enregistrements d'une table T1 qui contient elle aussi un champ "Réf"

    Le DTG joue le rôle de parent et T1 joue le rôle d'enfant.
    Pour une réf dans DTG je peux avoir plusieurs enregistrements dans T1 avec la même "Réf" (relation de 1 à plusieurs entre DTG et T1.

    Maintenant, je vous explique ce que j'ai fait et vous sollicite encore une fois car :
    - d'une part je bloque quand même (voir plus loin)
    - j'ai l'impression que ma méthode est un peu bourrine et qu'il doit y avoir plus simple.

    Dans le .xsd j'ai créé un DataAdapter représentant la requête remplissant mon DTG. J'ai créé une liaison supplémentaire (supplémentaire par rapport à celles créées dans ma BdD entre mes tables) entre le DTG et T1, via leurs champs Réf respectif.

    Je crée un dataview de ma table T1 (dtv_T1)

    Dans l'événement Mousup du DTG, je détecte la valeur du champ Réf de la ligne actuellement sélectionnée dans ce DTG par l'utilisateur.

    Je fais un FindRows sur le dtv_T1 en cherchant la valeur Réf en question.
    Jusque là, ça marche (j'ai vérifié en affichant les résultats dans une msgbox) :
    je récupère bien un tableau de datarowview contenant juste les enregistrements de ma T1 correspondant à "Réf".

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Sub DTG_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DTG.MouseUp
     
            Dim RéférenceActive As Integer
            Dim MaSélectionParRéférence As DataRowView()
    RéférenceActive = DTG.CurrentRow.Cells(0).Value 'Valeur du champ Référence dans la ligne active
     
            dtv_T1.Sort = "Référence ASC"
            MessageBox.Show(RéférenceActive)
            ' on récupère toutes les lignes de la table T1 dont la Référence est égale à RéférenceActive
            MaSélectionParRéférence = dtv_T1.FindRows(RéférenceActive)
            For Each ligne As DataRowView In MaSélectionParRéférence
                MessageBox.Show(ligne("champ1")) 'si champ1 est un champ de ma table T1
            Next
    C'est ensuite que je peine. Comment indiquer aux champs de mon form qu'ils doivent afficher le contenu de ce tableau de Datarowview ? Sachant qu'il s'agit de Textbox, ils doivent donc afficher une ligne à la fois de ce tableau, les autres lignes étant affichées lorsque l'utilisateur agit sur des boutons de navigation entre les enregistrements (qu'il me faut également concevoir)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'La ligne suivante génère une erreur
            Me.TXT_champ1.DataBindings.Add("text", MaSélectionParRéférence, "champ1")
    J'ai essayé qqch en utilisant la notion de currencyManager que je suppose avoir à utiliser pour naviguer parmi mes enregistrements, mais je bloque aussi car je ne sais pas trop comment l'utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     Private WithEvents MonCm As CurrencyManager
      MonCm = CType(Me.BindingContext(MaSélectionParRéférence), CurrencyManager)
    Voilà, est-ce que qqun pourrait soit me débloquer, soit me dire qu'il y a beaucoup plus simple et comment ?

  3. #3
    Membre actif
    Inscrit en
    Juillet 2013
    Messages
    772
    Détails du profil
    Informations forums :
    Inscription : Juillet 2013
    Messages : 772
    Points : 275
    Points
    275
    Par défaut
    Encore moi !

    Bon, j'ai trouvé une solution :

    P
    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
    rivate Sub DTG_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles DTG.MouseUp
     
            Dim RéférenceActive As Integer
     
    RéférenceActive = DTG.CurrentRow.Cells(0).Value 'Valeur du champ Référence dans la ligne active
     
     
            Me.TXT_champ1.DataBindings.Clear()
            Me.TXT_champ2.DataBindings.Clear()
            '...idem pour tous les champs de T1
     
            Me.TXT_Mets.DataBindings.Add("text", dtv_T1, "champ1")
             Me.TXT_Mets.DataBindings.Add("text", dtv_T1, "champ2")
            '...idem pour tous les champs de T1
     
            MonCm = CType(Me.BindingContext(Me.dtv_T1), CurrencyManager)
    Il me reste donc la 2ème question : ce type de code pour liaisonner un DTG parent à des champs textes affichant une table enfant est-il orthodoxe (je ne parle même pas d'optimisation à ce stade) ?

    En plus, n'étant qu'au début de mon projet, je n'ai aucune idée si cette façon de coder l'affichage des champs ne va pas me poser des problèmes ultérieurement quand j'en serai à vouloir modifier un champ, rajouter un enregistrement dans la T1 sur la même référence que mon DTG, etc...

Discussions similaires

  1. plusieurs Form dans une Form
    Par gecko753 dans le forum C++Builder
    Réponses: 10
    Dernier message: 06/12/2006, 17h50
  2. Plusieurs actions possible dans un <form>
    Par lodan dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 18/08/2006, 21h23
  3. Réponses: 12
    Dernier message: 30/03/2006, 20h55
  4. [MySQL] plusieurs bouton dans 1 form
    Par vincedjs dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 16/02/2006, 09h40
  5. Acesskey dynamique dans un form à plusieurs boutons submit ?
    Par boteha dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/09/2005, 17h54

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