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

Windows Forms Discussion :

[VB.NET] DataSet et fenêtre MDI Fille


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut [VB.NET] DataSet et fenêtre MDI Fille
    Bonjour,
    je suis en train de créer une appli avec des fenêtre MDI pour la gestion d'une base de données. Dans la fenêtre MDI parent, je me connecte à la BDD et je remplis le DataSet. Dans chacune des fenêtres MDI Fille, il y a des controles que je voudrais lier à une dataTable du DataSet de la fenêtre MDI Parent.
    Mon problème, c'est que je n'arrive pas à utiliser ce DataSet dans les fenêtres MDI Fille.

    Comment faire pour utiliser ce DataSet dans les fenêtres MDI Fille?

    Merci pour votre aide.

    Botanique

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    * Expose ton DataSet à l'aide d'un accesseur (ReadOnly Property)
    * Toutes les FormFilles concernées doivent avoir un constructeur surchargé qui recevoit en parametre la FormParent
    * Dans la FormParent toutes les FormFilles concernées doivent être instanciées avec ce constructeur surchargé ( New FormFille(Me))
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Merci pour ta réponse,
    étant ébutant, peux-tu m'expliquer un peu plus en détail tes deux premiers points?

    Amicalement

    Botanique

  4. #4
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    *1 J'imagine que tu as déclaré dans ta FormParent un Dataset privé DS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private DS As DataSet
    REM: Obtient le DataSet de l'instance FormParent
    Public ReadOnly Property DataSet As DataSet
     Get
        Return Me.DS
     End Get
    End Property
    *2 Chaque FormFille concernée doit avoir un constructeur surchargé recevant l'instance de FormParent
    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
     
    Public Class FormFille
    '...etc...
     Private parent As FormParent
     '...etc...
     REM: Permet d'instancier FormFille
     Public Sub New (ByVal f As FormParent)
        Me.New()
        Me.parent = f
     End Sub
     '...
     REM: maintenant le dataset de FormParent
     REM: est accessible par la FormFille
     'par exemple:
        Dim ds As DataSet = Me.parent.Dataset
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    En fait, mon DataSet a été créé par le concepteur de VS. Car j'utilise un DataSet fortement typé et je ne sais pas le faire par le code.

    La propriété readOnly se déclare dans le FormParent ou dasn le FormFille?

    Et le dataset ainsi créé dans le formfille sera-t-il déjà rempli?

    Merci de ton aide précieuse.

    Botanique

  6. #6
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par botanique
    La propriété readOnly se déclare dans le FormParent ou dasn le FormFille?
    Relis attentivement le 1* stp
    Citation Envoyé par botanique
    Et le dataset ainsi créé dans la Formfille sera-t-il déjà rempli?
    Tu veux dire récupéré par FormFille en l'attribuant à une variable locale. Ben il sera egal à celui de FormParent donc celà dépends si celui de FormParent a eu le temps d'être rempli.
    Si tu as correctement conçu ton appli, tu as accedé à tes données à l'ouverture de l'appli afin d'avoir les données en cache (une fois pour toute) avant d'afficher quoi que ce soit Non :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  7. #7
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Excuse moi d'être aussi bête.

    Par contre, j'ai fait comme tu m'as dis, mais j'ai une erreur au niveau de l'écriture : = Me.parent.dataset

    il me dit que dataset n'est pas un control de parent. C'est pour ça que je voulais être sûr que j'avais déclaré la propriété au bon endroit.

    Oui, je voulais bien dire récupéré. A partir de cette récupération, je pourrai modifier le dataset? Je pense que non puisque la propriété sera à ReadOnly.

    Je sais que je peux être pénible, mais c'est la première fois que je fais un accesseur alors je veux comprendre le pourquoi du comment.

    Merci de ta patience.

    Botanique

  8. #8
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Montre moi le code que tu as fait on va verifier en direct c'est mieux
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  9. #9
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Voici l'accesseur que j'ai créé :

    'Obtient le DataSet de l'instance FormParent
    Public Property DataSet() As DataSet
    Get
    Return Me.DtsHerbier1
    End Get

    Set(ByVal Value As DataSet)
    Me.DtsHerbier1 = Value
    End Set
    End Property

    Je l'ai mis dans la fromParent après la code généré par le concepteur Windows Form où DtsHerbier1 est déclaré en private.

    Puis dans la form fille, j'ai suchargé le constructeur Windows Form:

    Public Sub New(ByVal f As Form1)
    MyBase.New()
    Me.Parent = f

    'Cet appel est requis par le Concepteur Windows Form.
    InitializeComponent()

    'Ajoutez une initialisation quelconque après l'appel InitializeComponent()

    End Sub

    Dans La form parent (Form1), j'ai instancé la from fille comme tu me l'as précisé :

    Private Sub MenuTaxon_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuTaxon.Click

    Dim FrmAjoutTaxon As New AjoutTaxon(Me)

    'Déclaration de la fenêtre parent
    'FrmAjoutTaxon.MdiParent = Me
    'Affiche la fenêtre fille
    FrmAjoutTaxon.Show()


    End Sub

    Enfin, dans la fenêtre fille, j'ai déclaré le DataSet ds dans la procédure load de cette fenêtre :

    Dim ds As DataSet = Me.Parent.dataset

    Et c'est là qu'il me dit que dataset n'est pas un control de parent.

    Merci pour ton aide.

    Botanique

  10. #10
    Membre averti
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Points : 337
    Points
    337
    Par défaut
    Pourquoi ne pas passer le dataset ou un dataview en paramètre à ton MdiChild en utilisant le constructeur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Public Sub New(ds as dataset)
            MyBase.New()
     
            'Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
     
    End Sub
    ensuite tu retournes le dataset modifié au MdiParent et tu fais un ParentDS.merge(ChildDS).

  11. #11
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    ok la confusion vient du mot 'Parent' qui est déjà une propriété native de la Form
    Donc dans les FormFilles n'oublie pas de declarer une variable privée disons appelée 'ParentForm' et c'est à elle que tu attribue 'f' ensuite il suffira d'utiliser ParentForm.DataSet

    Sinon la remarque de Cyrilange est judicieuse si tu n'as besoin que de manipuler la DataSet (et rien d'autre) de la FormParent, autant en effet ne transmettre que directement l'instance de la Dataset, dans ce cas il te suffit de modifier le constructeur surchargé pour qu'il attende en paramètre un DataSet au lieu d'une Form
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  12. #12
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Oui, c'est une bonne idée, je n'y avais pas pensé.

    Mais je me heurte alors à un autre problème : les combobox ne se remplissent pas.

    Donc pour tester, j'ai crée un bouton test qui doit m'afficher "ok" dans une MessageBox lorsque je clique dessus. Mais lorsque je clique dessus, rien ne se passe.

    As-tu une idée?

    Et je pense que c'est pour ça que mes combo ne se remplissent pas avec les tables que je leur attribue quand le formulaire se charge.


    Merci beaucoup pour ton aide, sans toi, je galèrerais encore plus.

    Botanique

  13. #13
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    et comment procedes-tu pour le binding de ta combo ?
    et cette fois n'oublies pas sinon je ne prendrais pas le temps de repondre
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  14. #14
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut [VB.NET] Fenêtre MDI
    Excuse moi pour les balises, je pensais qu'une fois dans le titre du message elle réapparaissait après. Je n'oublirai plus maintenant.

    Avant, voici comment j'ai instauré la formfille :

    Dim DtSt as DataSet
    Public Sub New(ByVal F As Form1, ByVal DS As DataSet)
    MyBase.New()
    DtSt = DS
    Me.Parent = F
    'Cet appel est requis par le Concepteur Windows Form.
    InitializeComponent()

    'Ajoutez une initialisation quelconque après l'appel InitializeComponent()

    End Sub

    Puis, dans la prcédure de chargement de la formfille voici comment j'ai réaliser le binding :
    Me.ComboboxAjoutFam.datasource = DS.Tables("Table_famille")
    Me.ComboBoxAjoutFam.Displaymember = "Famille"
    Me.comboBox.ValueMember = "Famille"

    Voilà,

    merci de ton aide.

  15. #15
    Membre régulier
    Inscrit en
    Juillet 2005
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 83
    Points : 100
    Points
    100
    Par défaut

    Tu vas te faire gronder !

    Les balises "code" se mettent dans le corps de ton message, pour encadrer le code, justement.
    Tu dois écrire [ code ]// je tape mon code ici[ /code ] (sans les espaces) pour obtenir ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // je tape mon code ici
    (le bouton "éditer" te permettra de corriger ton message )

  16. #16
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Excuse moi pour les balises, je pensais qu'une fois dans le titre du message elle réapparaissait après. Je n'oublirai plus maintenant.

    Avant, voici comment j'ai instauré la formfille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    //Dim DtSt as DataSet 
    Public Sub New(ByVal F As Form1, ByVal DS As DataSet) 
    MyBase.New() 
    DtSt = DS 
    Me.Parent = F 
    'Cet appel est requis par le Concepteur Windows Form. 
    InitializeComponent() 
     
    'Ajoutez une initialisation quelconque après l'appel InitializeComponent() 
     
    End Sub


    Puis, dans la prcédure de chargement de la formfille voici comment j'ai réaliser le binding :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Me.ComboboxAjoutFam.datasource = DS.Tables("Table_famille") 
    Me.ComboBoxAjoutFam.Displaymember = "Famille" 
    Me.comboBox.ValueMember = "Famille"
    Voilà, merci de ton aide pour corriger mon erreur.

    Je ferai attention maintenant[/code]

  17. #17
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Merci Wyatan j'espère que notre collègue va enfin piger
    Bon Botanique je te fais une fleur mais en abuses pas
    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
     
    Public Class MaFormFille
      Inherits System.Windows.Forms.Form
     
      Private WithEvents DtSt As DataSet
     
      Public Sub New()
       MyBase.New()
       'Cet appel est requis par le Concepteur Windows Form.
       InitializeComponent()
       'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
      End Sub
      Public Sub New(ByVal DS As DataSet)
       Me.New()
       Me.DtSt = DS
       Me.InitCombo()
      End Sub
      '...etc...
      Private Sub InitCombo()
       Me.ComboboxAjoutFam.datasource = Me.DS.Tables("Table_famille") 
       Me.ComboBoxAjoutFam.Displaymember = "Famille" 
       Me.comboBox.ValueMember = "Famille"
      End Sub
      '...etc...
    End Class
    Ceci ne fonctionnera qu'à la condition que le DataSet de FormParent soit déjà rempli avant tout affichage d'une fenêtre fille
    Exemple
    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
     
    Public Class MaFormParent
     Public Sub New()
      Inherits System.Windows.Forms.Form
     
      Private WithEvents MonDataSet As DataSet
     
      Public Sub New()
       MyBase.New()
       'Cet appel est requis par le Concepteur Windows Form.
       InitializeComponent()
       Me.InitData()
      End Sub
      '...etc..
      Private Sub InitData()
        'code qui instancie et rempli MonDataSet
      End Sub
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  18. #18
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Ok, maintenant j'ai bien compris et ça marche

    Merci beaucoup à vous deux.

    De plus, j'ai bien retenu la leçon et je ne n'oublierai plus en ce qui concerne les balise.



    Encore une fois merci à vous pour votre précieuse aide.

    Botanique

  19. #19
    Membre averti
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Points : 337
    Points
    337
    Par défaut Re: [VB.NET] Fenêtre MDI
    Citation Envoyé par botanique
    Excuse moi pour les balises, je pensais qu'une fois dans le titre du message elle réapparaissait après. Je n'oublirai plus maintenant.

    Avant, voici comment j'ai instauré la formfille :

    Dim DtSt as DataSet
    Public Sub New(ByVal F As Form1, ByVal DS As DataSet)
    MyBase.New()
    DtSt = DS
    Me.Parent = F
    'Cet appel est requis par le Concepteur Windows Form.
    InitializeComponent()

    'Ajoutez une initialisation quelconque après l'appel InitializeComponent()

    End Sub

    Puis, dans la prcédure de chargement de la formfille voici comment j'ai réaliser le binding :
    Me.ComboboxAjoutFam.datasource = DS.Tables("Table_famille")
    Me.ComboBoxAjoutFam.Displaymember = "Famille"
    Me.comboBox.ValueMember = "Famille"

    Voilà,

    merci de ton aide.

    Essayes plutôt de faire ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Dim DtSt as New DataSet
     Public Sub New(ByVal DS As DataSet)
            MyBase.New()
            DtSt.Merge(DS)
     
            'Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
     
        End Sub
    J'ai enlevé le Me.parent=F parce que je pense qu'il vaut mieux précisé ça quand tu appelles ta ChildForm depuis ta MdiForm :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim ChildForm as new Form1
    ChildForm.Parent=Me
    ChildForm.Show(DS)

  20. #20
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2005
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2005
    Messages : 63
    Points : 43
    Points
    43
    Par défaut
    Ok, je vais changer le code avec ta proposition. Il est vrai que dans un tutoriel, le parent est précié à l'appel de la fenêtre fille.

    Merci beaucoup.

    Botanique

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/12/2007, 18h07
  2. Fermeture d'une fenêtre MDI fille dans Excel
    Par docsteff dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/09/2007, 15h32
  3. [VS2005] [C#] TextBox dans fenêtre MDI fille
    Par chocogrenouille dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/09/2006, 21h28
  4. [VB6] Documents Word -> fenêtre MDI fille
    Par shr3dpit dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/05/2006, 09h43
  5. Taille et position initiale d'une fenêtre MDI fille
    Par nutsDz dans le forum C++Builder
    Réponses: 8
    Dernier message: 09/05/2005, 16h05

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