none
Comment stocker les résultats d'une requête dans un combobox RRS feed

  • Question

  • Bonjour tout le monde,

    Je dispose d'un formulaire Windows form et j'ai créer une requête au chargement de mon formulaire dont voici le code:

    Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlDataAdapter(req, con)
                Dim res As New DataSet
                execu.Fill(res)
                con.Close()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    Ce que je n'arrive pas à faire c'est de stocker les résultats de la requête dans le combobox afin que les éléments de la liste déroulantes soient issus de la requête!

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    
        End Sub
    Votre aide me serait très précieuse, merci d'avance!

     

    onesat

    mercredi 6 août 2014 10:33

Réponses

Toutes les réponses

  • Bonjour

    Voila comment je fais :

    c'est surement pas la meilleur méthode, peut être que d'autres développeurs plus expérimentés ont une meilleure méthode. 

    mercredi 6 août 2014 14:28
  • Bonjour

    Le mieux c'est de utilizer le DataBinding. Je vous propose ce code :

      ComboBox1.DataSource = ds.Tables(0)
            ComboBox1.ValueMember = "Id"
            ComboBox1.DisplayMember = "Nom"

    Pour ValueMember vous spécifies le nom de la colonne dans le DataTable qui sera le SelectedItem.Value.
    DisplayMember c'est le nom de la colonne dans le DataTable qui sera affichée dans le ComboBox.

    Bien cordialement, 


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 7 août 2014 07:31
    Modérateur
  • Ok Aurel BERA, j'ai adapter ton code a mon projet et sa fonctionne:

    Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlDataAdapter(req, con)
                Dim res As New DataSet
                execu.Fill(res)
                con.Close()
                ComboBox1.DataSource = res.Tables(0)
                ComboBox1.ValueMember = "id_grp"
                ComboBox1.DisplayMember = "nom_grp"
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    maintenant ce qui me reste c'est comment définir une valeur par défaut pour mon combobox! Encore un coup de pouce!


    onesat

    jeudi 7 août 2014 09:05
  • Pour mettre une valeur depuis le code :

    MyComboBox.SelectedItem() = MyComboBox.Items(2)
    Donc pour que ça soit la valeur par défaut, il faut faire ce traitement dans le loader


    jeudi 7 août 2014 09:21
  • Ou plus simple:

    MyComboBox.SelectedIndex = 2

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 7 août 2014 09:32
    Modérateur
  • Ouf, il y a une précision que j'ai oublier d'apporter!

    L'élément par défaut ne fait pas parti du résultat de la requête! Ceci dit je voudrais que sa soit:

    --Sélectionner un groupe--  comme texte par défaut?


    onesat

    jeudi 7 août 2014 09:46
  • Dans ce cas, avant de remplir la combobox via une requête, il faut faire : 

    MyComboBox.Items.Add("MaValeurParDefaut")
    MyComboBox.SelectedIndex = 0

    jeudi 7 août 2014 09:50
  • Vous avez essayé?

    Cela ne fonctionne pas normalement, soit vous remplissez  le CoboBox en ajoutant les éléments 1 par 1 comme dans l'exemple de Grégory_Nail soit vous modifies la source de données en ajoutant au DataTable une ligne.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 7 août 2014 10:03
    Modérateur
  • dans mon cas ça marche : 

    jeudi 7 août 2014 10:07
  • Grégory_Nail Je n'ai pas vu que c'est votre réponse, j'ai cru que c'est onesatforever.
    Comme j'ai déjà dit dans mon message, avec votre code il fonctionne bien.
    Avec le mien on doit trouver une astuce - modifier la source de données.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    jeudi 7 août 2014 10:12
    Modérateur
  • J'ai fais ceci mais non!

    Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlDataAdapter(req, con)
                Dim res As New DataSet
                execu.Fill(res)
                con.Close()
                ComboBox1.Items.Add("--Selectionner un groupe--")
                ComboBox1.SelectedIndex = 0
                ComboBox1.DataSource = res.Tables(0)
                ComboBox1.ValueMember = "id_grp"
                ComboBox1.DisplayMember = "nom_grp"
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub

    La combobox1 est alimentée mais sans --Selectionner un groupe-- comme valeur par défaut!


    onesat

    jeudi 7 août 2014 10:15
  • normal car en faisant : 

    ComboBox1.DataSource = res.Tables(0)
    Initialise les valeur de la combobox, hors ici vous souhaitez ajouter des valeurs, il faut donc utiliser la méthode que je vous ai fourni au vue de votre besoin.
    jeudi 7 août 2014 10:31
  • Bonjour

    pour faire plus simple en une seule ligne:

    après avoir rempli le combo par une requête et après le binding tu fais

    Combo.Items.Insert(0,"----Valeur pas défaut----")


    koko

    jeudi 7 août 2014 12:23
  • Je tiens beaucoup à vous remerciez pour l'intérêt que vous avez accorder a mon sujet et la pertinence de vos différentes propositions! 
    Bon, suite à vos différentes propositions ce bout de code me semble être la meilleur solution:

    Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ComboBox1.Items.Add("--Selectionner un groupe--")
            ComboBox1.SelectedIndex = 0
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlDataAdapter(req, con)
                Dim res As New DataSet
                execu.Fill(res)
                con.Close()
                For Each oRow As DataRow In res.Tables("Table").Rows
                    ComboBox1.ValueMember = "id_grp"
                    ComboBox1.DisplayMember = ComboBox1.Items.Add(oRow.Item("nom_grp"))
                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    

    Mon objectif est:

    1) Alimenter la combobox1 suite au résultat d'une requête de sorte que les valeurs de mon combobox1 (Combobox1.ValueMember) soient le SelectedItem.Value  et Combobox1.DisplayMember le nom de la colonne qui sera affichée dans le Combobox1.

    2) --Sélectionner un groupe-- soit le texte sélectionner par défaut dans le combobox et pour valeur 0

    3) Suite a un traitement des champs de mon formulaire, je voudrais récupéré les valeurs (Combobox1.ValueMember="id_grp") pour les insérer dans une autre table. 

    Maintenant je demande juste votre avis sur ce présent code et encore une fois THANKS!


    onesat

    jeudi 7 août 2014 21:11
  • Voici mon code complet:

    Imports System.Data.SqlClient
    Public Class forminscription
        Dim con As New SqlConnection
        Private Sub forminscription_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            ComboBox1.Items.Add("--Selectionner un groupe--")
            ComboBox1.SelectedIndex = 0
            con.ConnectionString = "Data Source=WIN-DCM2QL793CF;Initial Catalog=maboutiquedb;Integrated Security=True"
            con.Open()
            Try
                Dim req As String = "SELECT * FROM groupes_utilisateurs"
                Dim execu As New SqlDataAdapter(req, con)
                Dim res As New DataSet
                execu.Fill(res)
                con.Close()
                For Each oRow As DataRow In res.Tables("Table").Rows
                    ComboBox1.ValueMember = "id_grp"
                    ComboBox1.DisplayMember = ComboBox1.Items.Add(oRow.Item("nom_grp"))
                Next
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
        Private Sub btajout_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btajout.Click
            con.Open()
            Try
                Dim cmd As New SqlCommand(("INSERT INTO utilisateurs VALUES ('" & _
                                           txtidutili.Text & "','" & _
                                           ComboBox1.Text & "','" & _
                                           txtnomutili.Text & "','" & _
                                           txtmdp.Text & "','" & _
                                           txtnomfautili.Text & "','" & _
                                           txtprenomutili.Text & "','" & _
                                           txtemailutili.Text & "','" & _
                                           txtbputili.Text & "', SYSDateTime(), '" & _
                                           txtetatcompte.Text & "','" & _
                                           txtnumteleutili.Text & "')"), con)
    
                cmd.ExecuteNonQuery()
                con.Close()
                MsgBox("Success ...", MsgBoxStyle.Information, "L'utilisateur a ete correctement ajouter")
                txtidutili.Focus()
            Catch ex As Exception
                MsgBox(ex.Message)
            End Try
        End Sub
    
        Private Sub GroupBox1_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GroupBox1.Enter
    
        End Sub
    
        Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
    
        End Sub
    End Class

    Et quand j'exécute mon code, j'ai ce message d'erreur:
    Echec de la conversion de la valeur varchar 'Administrateur en type de données int.

    Coup de main please!


    onesat

    samedi 9 août 2014 15:28
  • Si vous voulez modifier la source de données le plus simple c'est de utiliser la solution proposée par Grégory_Nail(mercredi 6 août 2014 15:16 ), évidement après avoir ajoute l'élément implicite avec : 

    ComboBox1.Items.Add("--Selectionner un groupe--")
    ComboBox1
    .SelectedIndex = 0

     

     Dans le cas où vous voulez utiliser exactement la source de données, sera indiqué d’utiliser le DataBinding.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    mardi 12 août 2014 06:46
    Modérateur