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 :

Charger ComboBox avant ouverture Form


Sujet :

VB.NET

  1. #1
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut Charger ComboBox avant ouverture Form
    Bonjour à tous,

    Une fois de plus, je me retourne vers vous pour avoir vos conseils.

    J'ai un Formulaire principal que nous appelerons Form1.
    Sur Form1, j'ai un bouton qui m'ouvre Form2.
    Dans ce Form2, j'ai une combobox que je charge (Sur Form_Load) à partir d'une table Access.
    Toutefois, comme la liste est conséquente, Form2 met un certain temps à s'ouvrir. De plus, cette liste est rechargée à chaque ouverture de Form2.

    Donc, est t'il possible de charger cette liste une seule fois lors de l'ouverture de mon application (sachant que pour différentes raisons un peu compliquées, je ne peux pas utiliser Sub Main) afin que je puisses ouvrir Form2 de façon plus souple ?

    Merci à tous

    Cordialement

    Christophe

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Par défaut
    Bonjours,

    a tu pensé a un backgroupworker ?

    je pense que c'est une bonne solution.

    @+++

  3. #3
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Salut,

    Merci de me répondre un dimanche.

    Je suis débutant en Vb.Net, alors, je ne sais pas du tout de quoi du me parles.

    Pourrai-tu me donner quelques précisions ?

    Cordialement

    Christophe

  4. #4
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Salut,

    Il serait plus judicieux de charger la table access dans une DataTable au début (form1)
    Après, il suffit de lié la DataTable au combobox au chargement de form2. Par contre, je ne sais pas si cela résoudera le problème d'affichage. A essayer.

    Pour le DataTable:http://plasserre.developpez.com/cour...bases-donnees2

  5. #5
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Salut Yonpo,

    Merci pour ces conseils.

    En tant que débutant, je me suis bien sur basé sur le Tuto de Philippe Lassere.
    J'ai également suivi tes conseils en chargeant ma DataTable à l'ouverture du Form1.
    Seulement, comme je déclare le DataSource à chaque ouverture de mon Form2, cela ne change effectivement rien.
    J'ai également essayé avec le DataReader.
    Il semblerait que cela aille plus vite à charger.
    Toutefois, j'ai une lacune.
    Je charge, en fait, 2 colonnes :
    La 1° est ma clé primaire (Long) qui reste en colonne cachée ;
    La seconde est ma valeur de champ (String).
    Dans l'exemple de Philippe Lasserre on utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListBox1.Items.Add(myReader.GetString(0))
    pour charger la valeur String de la 1° colonne.

    Donc ma question est :
    Est-il possible de charger un combobox multicolonne avec DataReader ?

    Merci beaucoup

    Cordialement

    Christophe

  6. #6
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par marsouin_89 Voir le message
    Est-il possible de charger un combobox multicolonne avec DataReader ?
    Oui, mais il faudra personnaliser le combobox. Un très bon exemple pour toi ici

    Mais, tu n'as pas besoin de faire un combobox multicolonne si tu fais une requète ne retournant qu'une seule colonne. En locurence, la deuxième colonne (string)

  7. #7
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Salut Yonpo,

    Merci pour ta réactivité. C'est vraiment sympa.

    J'ai absolument besoin de ma 1° colonne, car je récupère cette valeur pour un autre traitement qui vient ensuite.
    J'avais déjà vu le Tuto du lien que tu m'as donné. C'est un peu chaud pour mes petites compétences, mais je vais me pencher dessus.

    Je te tiens au courant

    Encore merci

    Cordialement

    Christophe

  8. #8
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par marsouin_89
    Seulement, comme je déclare le DataSource à chaque ouverture de mon Form2, cela ne change effectivement rien.
    Il y a beaucoup d'enregistrement dans la table? Pour ma part, j'ai essayer avec plus de 2000 enregistrements et l'affichage reste correct.

    Si tu utilises un DataTable, tu pourrais l'utiliser afin de récupérer la valeur de la 1ère colonne pour l'autre traitement que tu veux faire.

    Je me pose une question: le chargement des données dans le datatable, où le fais-tu? Car si tu le fais au chargement du form2, c'est normal que ça prenne un peu de temps (ouverture de la connexion, chargement dans le datatable, chargement du datatable dans le combobox).

  9. #9
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Re-salut Yonpo,

    Alors pour éviter tout doute, voici le code que j'utilise au chargement de Form2.
    Sachant qu'en fait, j'ai 2 ComboBox à charger avec 2 tables différentes et donc 2 Sql différents.
    Pour le moment j'appele ce code 2 fois car je ne sais pas comment faire pour l'executer 1 seule fois et charger mes 2 listes dans mes 2 combobox.

    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
    Private Sub ConnectionBDD1(ByVal mFolder As String, ByVal mTable1 As String, ByVal mComboBox1 As ComboBox, _
                                     ByVal mSql1 As String)
     
            '//////////////////////////////////////
            'Déclarer la connexion
            Dim ObjetConnection As OleDbConnection
            ' Déclaration l'Objet Commande
            Dim ObjetCommand As OleDbCommand
            ' Déclaration Objet DataAdapter
            Dim ObjetDataAdapter As OleDbDataAdapter
            ' Déclaration Objet DataSet
            Dim ObjetDataSet As New DataSet
            ' Déclaration Objet DataTable
            Dim ObjetDataTable As DataTable
            ' Paramêtres de connexion à la DB
            Dim strConn As String
            'Initialisation de la chaîne de paramètres pour la connexion
            strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & mFolder & "\Data_Cities.mdb"
     
            'Instanciation d'un Objet Connexion
            ObjetConnection = New OleDbConnection
            'Donner à la propriété ConnectionString les paramètres de connexion
            Try
                ObjetConnection.ConnectionString = strConn
                'Ouvrir la connexion
                ObjetConnection.Open()
                'Instancier un objet Commande
                ObjetCommand = New OleDbCommand(mSql1)
                'Instancier un objet Adapter
                ObjetDataAdapter = New OleDbDataAdapter(ObjetCommand)
                'initialiser l'objet Command
                ObjetCommand.Connection() = ObjetConnection
                'Avec l'aide de la propriété Fill du DataAdapter charger le DataSet
                ObjetDataAdapter.Fill(ObjetDataSet, mTable1)
                'Mettre dans un Objet DataTable une table du DataSet
                ObjetDataTable = ObjetDataSet.Tables(mTable1)
                'Indiquer au combobox d'afficher la table (indiquer la source)
                mComboBox1.DataSource = ObjetDataSet.Tables(mTable1)
                'Indiquer quelle colonne afficher
                mComboBox1.DisplayMember = "MonChampString"
            Catch ex As Exception
                MsgBox("Le chargement des listes a échoué. " & vbLf & "Opération annulée.")
                Me.Close()
            End Try
     
        End Sub
    Pour appeler ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call ConnectionBDD1(My.Application.Info.DirectoryPath & "\DATA","MaTable",Me.CombBox1,"SELECT MaTable.ID, MaTable.MonChampString FROM MaTable")
    Ce code est issu du Tuto de Philippe Lassere.
    Ce que je ne comprend pas, c'est qu'à priori, ObjetDataTable ne sert à rien.

    Merci de tes conseils

    Cordialement

    Christophe

  10. #10
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par marsouin_89 Voir le message
    Pour le moment j'appele ce code 2 fois car je ne sais pas comment faire pour l'executer 1 seule fois et charger mes 2 listes dans mes 2 combobox.
    Si tu veux l'appeller qu'une seule fois, il faut changer la requète sql (1ère requète=> 1er combobox, 2ème requète=> 2ème combobox)

    Citation Envoyé par marsouin_89 Voir le message
    Ce que je ne comprend pas, c'est qu'à priori, ObjetDataTable ne sert à rien.
    Un DataSet peut contenir plusieurs tables tandis qu'un DataTable contient une seule table.
    Donc quand tu fais:
    Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
    ObjetDataTable = ObjetDataSet.Tables(mTable1)

    Tu mets la table mTable1 dans un DataTable.
    Un DataSet est utile si tu as plusieurs table.
    Donc comme tu as deux tables, tu peux soit utiliser UN DataSet qui contiendra les deux tables soit utiliser DEUX DataTable (un qui contient la 1ère table et l'autre la 2ème table).

    Citation Envoyé par marsouin_89 Voir le message
    voici le code que j'utilise au chargement de Form2
    Normal que la fenêtre mette du temps à s'ouvrir.
    Moi, je ferai le chargement des tables au lancement de la fenêtre principale. A essayer.

  11. #11
    Candidat au Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Par défaut
    bonjour marsouin_89,

    tu peut aussi remplir un dataset au demarrage de ton application , et comme ca a chaqe fois ou tu veux afficher le conteneu de tablesoit dans un datagridview ou dans un combobox par un simple code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim ds As New DataSet
            Dim c As New OleDbConnection("ta chaîne de connexion")
            c.Open()
     
            Dim req As String = "select * from client"
            Dim da As New OleDbDataAdapter(req, c)
            da.Fill(ds, "client")
    et a chaque fois ou tu veux afficher le conenu de ta table (par exemlo dans un datgridview ) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DataGridView1.DataSource = ds.Tables("client")

    Mohamed JEMAOUI

  12. #12
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Bonjour Yonpo,

    Super toutes tes explications . Je commence à y voir plus clair .
    Donc, j'ai mis mon code dans un module en déclarant ObjetDataSet en variable public.
    Je charge mes tables à l'ouverture de Form1 et je défini le DataSource à l'ouverture de Form2.

    Est-ce la bonne solution ?

    Cela mouline encore, mais il faut reconnaître que j'ai vraiment beaucoup de données (environ 20 000 pour une liste et 10 000 pour l'autre). Je ne penses pas qu'il soit possible de faire beaucoup mieux.
    Quoi qu'il en soit, maintenant je ne charge qu'une seule fois mes tables dans le DataSet, ce qui n'est déjà pas si mal.

    Vraiment merci

    Cordialement

    Christophe

  13. #13
    Membre émérite Avatar de yonpo
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2010
    Messages
    617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2010
    Messages : 617
    Par défaut
    Citation Envoyé par marsouin_89 Voir le message
    Donc, j'ai mis mon code dans un module en déclarant ObjetDataSet en variable public.
    Je charge mes tables à l'ouverture de Form1 et je défini le DataSource à l'ouverture de Form2.

    Est-ce la bonne solution ?
    Au vue de mes connaissances, oui, je pense que c'est une bonne solution mais des internautes plus expérimentés diront qu'il y a mieux.

    Citation Envoyé par marsouin_89 Voir le message
    Cela mouline encore, mais il faut reconnaître que j'ai vraiment beaucoup de données (environ 20 000 pour une liste et 10 000 pour l'autre). Je ne penses pas qu'il soit possible de faire beaucoup mieux.
    Je ne voit pas d'autre solution pour éviter que l'affichage du form2 rame....

  14. #14
    Membre émérite

    Homme Profil pro
    Inscrit en
    Octobre 2009
    Messages
    789
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Octobre 2009
    Messages : 789
    Par défaut
    Merci Yonpo de me confirmer cela.

    Je penses que l'on peut dire que ce sujet est clos et résolu.

    Je te souhaites, ainsi qu'à ta famille, de bonnes fêtes de fin d'année.
    Je le souhaites également à tous les internautes, car vous êtes vraiment super d'aider de pauvres petits débutants comme moi.

    Cordialement

    Christophe

  15. #15
    Membre émérite Avatar de zeavan
    Architect
    Inscrit en
    Avril 2003
    Messages
    590
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Autre

    Informations professionnelles :
    Activité : Architect

    Informations forums :
    Inscription : Avril 2003
    Messages : 590
    Par défaut
    Combobox n'est pas un control pour afficher autant d'information a la fois, je te conseil fortement de monter les data au fur et a mesure suivant les request de l'utilisateur final, un combobox autocomplete en fait.

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

Discussions similaires

  1. [AC-2007] Execution de Form_current avant ouverture du form
    Par appocallypseman dans le forum Runtime
    Réponses: 1
    Dernier message: 14/09/2011, 19h28
  2. Charger application avant de la lancer
    Par Ulmo dans le forum Windows
    Réponses: 4
    Dernier message: 27/03/2006, 02h15
  3. Bouton submit grisé avant ouverture lien
    Par Ben42 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 30/01/2006, 17h04
  4. Problème ouverture form à partir d'une var
    Par priest69 dans le forum Access
    Réponses: 1
    Dernier message: 29/11/2005, 12h21
  5. [Téléphoner]Focus sur le tel + ouverture Form
    Par samlepiratepaddy dans le forum IHM
    Réponses: 2
    Dernier message: 05/11/2005, 22h06

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