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 :

Comment accéder au dataset via l'assistant VS 2005 à partir d'un second formulaire ?


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut Comment accéder au dataset via l'assistant VS 2005 à partir d'un second formulaire ?
    Bonjour,

    Je programme actuellement une petite appli pour gérer un parc informatique avec les infos stockées dans une BDD SQL server 2005.
    Dans mon projet sous VS 2005, j'ai 2 formulaires, un principal et un second pour gérer les options. Afin de me simplifier le code, le dataSet et les dataAdapter ont été générés via les assistants de VS.

    Mon problème, c'est que le DataSet fait parti de l'espace de nom de mon formulaire principal et que du coup, je n'arrive pas à lier des contrôles de mon formulaire d'options dessus sans devoir créer un nouveau DataSet et le merger avec le premier.

    Je me suis dis que pour éviter ce désagrément, j'allais gérer le databinding directement dans le fichier designer du formulaire d'options comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            'Types_ListBox
            '
            Me.Types_ListBox.DataSource = Form1.InfogestionDataSet.type 'ligne rajoutée manuellement
            Me.Types_ListBox.DisplayMember = "nom_type"
            Me.Types_ListBox.FormattingEnabled = True
            Me.Types_ListBox.Location = New System.Drawing.Point(6, 22)
            Me.Types_ListBox.Name = "Types_ListBox"
            Me.Types_ListBox.Size = New System.Drawing.Size(258, 264)
            Me.Types_ListBox.TabIndex = 14
            Me.Types_ListBox.ValueMember = "type_ID"
    ce qui a pour effet de faire planter le concepteur de VS (malgré un fonctionnement tout ce qu'il y a de plus normal) :
    Une ou plusieurs erreurs ont été rencontrées lors du chargement du concepteur. Les erreurs sont répertoriées ci-dessous. Certaines erreurs peuvent être corrigées en régénérant votre projet, d'autres peuvent nécessiter des modifications du code.

    Le type 'infogestion_module_gestion_des_machines.My.MyProject' n'a pas de propriété nommée 'Forms'.
    Masquer Modifier

    à System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
    à System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
    à System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
    à System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
    à System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
    à System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement)
    à System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)
    Ma question est donc : comment faire pour n'utiliser qu'un seul dataSet pour toute mon application tout en profitant des avantages des assistants du concepteur (le petit carré en haut à droite des contrôles tels que listbox ou combobox qui permet de lier le contrôle aux données d'un dataset)?

    Merci de votre aide !

  2. #2
    Membre habitué Avatar de guandal
    Profil pro
    Analyste programmeur
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 168
    Points
    168
    Par défaut
    Dans le menu contextuel du Combobox:" Utiliser les elements liés aux données"->"Source de données" et tu choisis "Autres source de données" puis "source de données du projet" . là tu choisis le dataset que tu veux.
    J'espère que ça va t'aider.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci guandal pour ta réponse, mais le problème est bien là, c'est à dire que si je fais comme tu dis, il m'instancie une nouvelle fois ma classe dataset ce que je ne veux pas, un seul objet dataset me suffit amplement, surtout que mon premier dataset est déjà chargé des infos que je veux manipuler.

    Mais vu que j'utilise VS2005 depuis peu, je m'y prends peut-être mal..

  4. #4
    Membre habitué Avatar de guandal
    Profil pro
    Analyste programmeur
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 168
    Points
    168
    Par défaut
    [QUOTE=teraben]Merci guandal pour ta réponse, mais le problème est bien là, c'est à dire que si je fais comme tu dis, il m'instancie une nouvelle fois ma classe dataset ce que je ne veux pas,
    QUOTE]
    Moi il me l'a pas instancié une nouvelle fois, certes on revoit le dataset sur le Form.vb(Design) mais je n'ai pas une nouvelle instance du Dataset ;
    peut etre que j'ai loupé la POO sous VS2005.

  5. #5
    Membre habitué Avatar de guandal
    Profil pro
    Analyste programmeur
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 168
    Points
    168
    Par défaut
    Toutes mes excuses , effectivement il l'instancie.
    Par contre je n'ai pas d'idées pour le moment pour t'aider.
    Sorry.

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par guandal
    Toutes mes excuses , effectivement il l'instancie.
    Par contre je n'ai pas d'idées pour le moment pour t'aider.
    Sorry.
    On est d'accord sur l'instanciation, et ça me rassure. Mais cependant ce comportement m'intrigue... A croire qu'il faut générer un dataset par formulaire, ce qui ne me semble pas vraiment optimisé..
    Bouh Microsoft, ils poussent à coder avec les pieds !

  7. #7
    Membre régulier
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 99
    Points
    99
    Par défaut
    Dans les deux cas tu déclare un DataSet dans ton From2.

    Il te suffit de le passé en commentaire dans le constructeur de ton Form2 :

    Sub new (ds as DataSet)
    Me.ds = ds
    ...
    End Sub

    Ou de créer une propriété dans ton form2 :

    Public Property NomPropriete() as DataSet
    ...
    End property

    Et de l'appeller, dans la form1, avant le form2.Show, du genre form2.NomPropriete = ds

    Dans les deux cas, tu pourra te passer du merge.

    Pense cependant à detruire (par la méthode Disposed) les DataSet à la fermeture de tes formulaire.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Merci Lunelame pour tes solutions. L'inconvénient, c'est que c'est pas la méthode merge qui me pose pb, c'est le fait d'avoir 2 dataset identiques en mémoire juste pour pouvoir utiliser les assistants de VS2005, alors que le dataset initial est déclaré en Friend et est donc accessible (à partir de mon 2eme formulaire par Form1.monDataSet).

    Du coup, je souhaite donc modifer les propriétés des contrôles du 2eme formulaire "manuellement" en rajoutant la proriété datasource dans le fichier Form2.designer.vb. Mais vu que je maitrise pas encore la serialization, et les fichiers auto-générés d'un projet sur le bout des doigts, je ne sais pas quoi modifier dans ce fichier pour ne plus avoir l'erreur du concepteur (cf premier post : "Le type 'infogestion_module_gestion_des_machines.My.MyProject' n'a pas de propriété nommée 'Forms'.").

    Si ça se trouve, c'est 10x plus simple à gérer en C#...

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    En attendant, j'ai solutionné le problème en gérant le binding dans une procédure qui se lance au chargement du formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            Me.monListBox.DataSource = Form1.InfogestionDataSet.type
            Me.monListBox.ValueMember = "typeID"
            Me.monListBox.DisplayMember = "nom_type"
        End Sub
    C'est un moindre mal, mais adieu les avantages des assistants de liaisons aux données :/

    Je vais devoir pisser du code sur ce coup

  10. #10
    Membre habitué Avatar de guandal
    Profil pro
    Analyste programmeur
    Inscrit en
    Février 2006
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 127
    Points : 168
    Points
    168
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.monListBox.DataSource = Form1.InfogestionDataSet.type
    N'est pas membre de ...
    Tu es sur ça marche chez toi?

  11. #11
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Au lieu de déposer un composant DataSet dans tes forms, regarde si tu ne peux pas ajouter à tes Sources de données (menu de Visual Studio), en tant que source Objet, le type correspondant à ton DataSet.
    De la sorte, tu pourras peut-être spécifier directement ce type en mode création en tant que source de tes BindingSource, et tu pourras bénéficier dès le mode design d'une source typée.

    Ensuite, tu devras à l'exécution instancier ton DataSet et le définir comme source réelle de tes BindingSource. Il sera simple dans ce cas pour toi de n'instancier qu'un seul DataSet et de la réutiliser partout où tu veux.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par guandal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.monListBox.DataSource = Form1.InfogestionDataSet.type
    N'est pas membre de ...
    Tu es sur ça marche chez toi?
    Ca marche chez moi, aucun soucis avec ce code, mais je précise que j'ai un dataset fortement typé (type est un DataTable).


    Citation Envoyé par FRED.G
    Au lieu de déposer un composant DataSet dans tes forms, regarde si tu ne peux pas ajouter à tes Sources de données (menu de Visual Studio), en tant que source Objet, le type correspondant à ton DataSet.
    De la sorte, tu pourras peut-être spécifier directement ce type en mode création en tant que source de tes BindingSource, et tu pourras bénéficier dès le mode design d'une source typée.

    Ensuite, tu devras à l'exécution instancier ton DataSet et le définir comme source réelle de tes BindingSource. Il sera simple dans ce cas pour toi de n'instancier qu'un seul DataSet et de la réutiliser partout où tu veux.
    Super !!!
    Merci Fred, ça marche du tonnerre !
    J'ai juste rajouté dans le constructeur du formulaire, la source des BindingSource et tout va bien !
    Content d'avoir la solution, ça va me faire gagner un temps fou à l'avenir.

    Merci aussi aux autres de m'avoir aidé sur ce problème !

  13. #13
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Ravi d'avoir pu t'aider.


    Citation Envoyé par teraben
    Bouh Microsoft, ils poussent à coder avec les pieds !
    Citation Envoyé par teraben
    Content d'avoir la solution, ça va me faire gagner un temps fou à l'avenir.
    Comme quoi on condamne parfois un peu vite.

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8
    Points : 3
    Points
    3
    Par défaut
    Je me plains, je me plains, mais ils ont quand même de très bons outils, je ne peux plus me passer d'intellisense par exemple

  15. #15
    Membre expérimenté
    Avatar de FRED.G
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 032
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 032
    Points : 1 505
    Points
    1 505
    Par défaut
    Citation Envoyé par teraben
    je ne peux plus me passer d'intellisense
    +1

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/09/2009, 22h15
  2. Réponses: 6
    Dernier message: 20/05/2008, 16h35
  3. changer la connexion string d un dataset cree via l assistant
    Par ZashOne dans le forum Accès aux données
    Réponses: 3
    Dernier message: 21/03/2008, 11h13
  4. Réponses: 1
    Dernier message: 06/06/2007, 09h31
  5. Réponses: 4
    Dernier message: 23/01/2007, 13h03

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