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 :

Passer un dataset d'un form à l'autre dans un projet de type bibliothèque de classe


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Points : 15
    Points
    15
    Par défaut Passer un dataset d'un form à l'autre dans un projet de type bibliothèque de classe
    Bonjour,

    J'ai une application qui comporte 2 fenêtre form1 et form2.

    J'utilise form1 pour remplir un dataset créé dans ce form.
    form2 utilise les données de ce dataset et écrit également dedans (rajoute de nombreuses tables)

    pour utiliser ce dataset dans le code de form2 je l'appelle tout simplement en faisant : Form1.MonDataSet

    Tout ça marche très bien tant que je suis en type d'application "Application Windows Form"

    Là où ça se complique c'est que mon application doit être appelée par un autre programme en tant que module complémentaire, pour ce faire je génère des .dll, je change donc le type d'application en "bibliothèque de classe".

    Quand je change le type d'application le débogage automatique de VS2008 me génère une erreur à chaque fois que dans le form2 je fais référence à mon dataset du form1 :
    Une référence à un membre non partagé requiert une référence d'objet
    Premièrement je ne suis pas bien sur de comprendre pourquoi j'ai ce type d'erreur qui empêche la génération de mon projet. Si une bonne âme pouvait tenter de m'expliquer...

    Deuxièmement j'aimerais bien trouver une solution pour 'passer' ce dataset de la form1 à la form2. Que la form2 puisse écrire dans le même dataset.

    Petites infos complémentaire sur la structure de mon projet :
    en mode "application Windows Form"
    l'objet de démarrage est la form1. Quand c'est nécessaire dans le code de la form1 je fais stricto census :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Me.hide() 
    form2.showdialog()
    en mode bibliothèque de classe:
    l'application hôte lance un script qui définit une nouvelle instance de ma form1 et le "montre"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim fMenu as new Form1
    fMenu.showdialog()
    puis dans le code de form1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim Fenetre as new Form2 
    Fenetre.showdialog
    Me.hide

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET et Java (Android)
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET et Java (Android)
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Points : 36
    Points
    36
    Par défaut
    Salut.

    A mon avis dans form2 tu fais appelle ton dataset en faisant :
    Form1.MonDataset

    L’objet MonDataset est surement déclaré comme Friend ou Public dans Form1. Tu pourrais faire comme ça si MondataSet était délcaré comme Shared mais ce n’est pas terrible à mon avis.

    Il faudrait mieux faire à mon avis un truc du genre dans form2 :

    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
     
    Public Class Form2
     
        Friend WithEvents MonDataset As DataSet
      ...
     
      Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
        End Sub
     
        Sub New(ByVal DataSetParam As DataSet)
            Me.New()
            Me.MonDataset = DataSetParam
     
        End Sub
     
        Public Sub MaSub()
    ...
            Me.MonDataset...
    ...
        End Sub
     
     
    ...
    End Class
    Puis dans form1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dim Fenetre as new Form2(MonDataSet)
    Fenetre.showdialog
    Me.hide

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 37
    Points : 15
    Points
    15
    Par défaut
    Merci,

    Ca résous mon problème mais il y a 2-3 petites choses que je comprends pas :

    à quoi sert le

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Friend WithEvents MonDataset As DataSet
    Et qu'est ce qu'il faut faire là :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Public Class Form2
     
        Friend WithEvents MonDataset As DataSet
      ...
     
      Sub New()
     
            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
     
        End Sub
    J'ai rien rajouté du tout contrairement à ce qu'indique le commentaire automatique quand on rajoute la procédure new() et ce qu'il se passe c'est que pendant le InitializeComponent() le programme rentre dans un des événement de ma procédure, ce qui a tendance à le faire bugger vu que rien n'est initialisé à ce moment là!

    (j'ai réussi à contourner le problème mais je sens que c'est pas une solution très carrée...)

    Merci pour ta réponse

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Développeur .NET et Java (Android)
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET et Java (Android)
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Points : 36
    Points
    36
    Par défaut
    Salut,

    Je déclare le Dataset ainsi par habitude (pour faire un peu comme le ferait le concepteur de Visual studio)

    WithEvents indique l’objet peut lancer des évènements et ainsi tu peux les traiter dans ton code. Mais c’est vrai que ce n’est pas utile ici.

    Friend définit que c’est une classe Amie ce qui permet d’accéder a certain Propriété et cetaine méthode de cette class.

    Mais ça marcherait tout aussi bien dans déclarant le DataSet comme privé c’est-à-dire disponible uniquement dans ta classe form2 et sans le WithEvents en faisant ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Private MonDataSet As DataSet
    En fait "InitializeComponent" est générée par le concepteur. Elle crée et initialise les différents objet que tu as glissé sur ton form avec le concepteur. Cela fait appel à une procédure qui se trouve dans form2.designer.vb (je suis sous visual studio 2005). Ensuite il n'est obligatoire de mettre du code ce qui est ton cas.

    C’est pareil je crée toujours le constructeur par défaut pour le form comme ça au cas où.

    Mais tu peux aussi ne créer qu’un seul constructeur et faire comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Sub New(ByVal DataSetParam As DataSet)
            ' Cet appel est requis par le Concepteur Windows Form.
            Me.InitializeComponent()
     
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            Me.MonDataSet = DataSetParam
     
        End Sub

Discussions similaires

  1. Passer des variables d'une form à l'autre
    Par flydan dans le forum Débuter
    Réponses: 3
    Dernier message: 11/10/2007, 13h19
  2. problème à passer des valeurs d'une form à l'autre
    Par gibea00 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/08/2007, 13h45
  3. [formulaire] passer une var d'un form à l'autre dans la même page
    Par rapanui dans le forum Balisage (X)HTML et validation W3C
    Réponses: 18
    Dernier message: 23/11/2006, 12h14
  4. [C#]Comment passer un parametre d une Form à l'autre ?
    Par ToxiZz dans le forum Windows Forms
    Réponses: 9
    Dernier message: 08/02/2006, 12h28
  5. Réponses: 2
    Dernier message: 04/10/2005, 20h54

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