Envoyer Combobox.SelectedItem a une function et l'attribuer a une table() <-> Pr [Résolu]

Signaler
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009
-
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009
-
Bonjour, j'ai un probleme vraiment simple mais je suis incapable de figurer comment le regler.

J'explique, j'ai 3 tables nommer; "Auto, Legumes, Films". Je fait une function que lorsque le "SelectedItem" de mon Combobox change alors le nom du
SelectedItem est passer a une function.

Par la suite la fonction utilise le nom du SelectedItem pour afficher la table correspondante, exemple:SelectedItem est "Auto" donc la table attribuer sera "auto()".
Les 3 items de mon Combobox sont identiques au noms de mes tables.

Ce que j'essaie de faire est, exemple, SelectedItem=Auto() donc passer en parametre de type String a ma function afficheChoix() qui va ensuite entrer dans une boucle
"For" pour afficher les elements contenu dans auto() et les renvoyers dans un ListBox.

Mon probleme: Je ne sais pas comment faire en sorte que le selecteditem de combobox renvoyer a ma function devienne le nom de la table qui lui correspond, donc
pour le moment ma function essaie de travailler avec un type string et non pas ma table, j'espere que je suis claire.

Je sais comment faire cela en JavaScript mais pas certain en VB.NET. Je fonctionnais avec un "Select Case" avant de me decider a faire une function, j'ai
voulu faire cela pour eliminer une repetition inutile du code(dans le case).

Merci d'avance!

Code ou j'appel ma function:
------------------------------------------------------------------------------------------
Code:

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cbchoix.SelectedIndexChanged
        Dim s As String

        s = cbchoix.SelectedItem
        afficheListe(s)
End Sub
------------------------------------------------------------------------------------------

Le Code actuel de ma function
------------------------------------------------------------------------------------------
Code:

    Private Sub afficheListe(ByRef listeChoix As String)
        Dim Auto() As String = {"Firebird", "Mustang", "Charger", "Challenger", "Corvette"}
        Dim Legumes() As String = {"Carotte", "Navet", "Radis", "Choux Fleur", "Pomme de Terre"}
        Dim Films() As String = {"Evil Dead", "Brain Dead", "Fredy", "Jason", "Resident Evil"}

        Dim n As Integer

        liste.Items.Clear()
        For n = 0 To listeChoix.Count - 1
            liste.Items.Add(listeChoix(n))
        Next
    End Sub
------------------------------------------------------------------------------------------

EDIT(Vieu "Select Case" Code):
------------------------------------------------------------------------------------------
Code:

        'Dim auto() As String = {"Firebird", "Mustang", "Charger", "Challenger", "Corvette"}
        'Dim legumes() As String = {"Carotte", "Navet", "Radis", "Choux Fleur", "Pomme de Terre"}
        'Dim films() As String = {"Evil Dead", "Brain Dead", "Fredy", "Jason", "Resident Evil"}
        'Dim s As String
        'Dim n As Integer = 0
        's = cbchoix.SelectedItem

        'Select Case s
        '    Case "Auto"
        '        liste.Items.Clear()
        '        For n = 0 To auto.Count - 1
        '            liste.Items.Add(auto(n))
        '        Next
        '    Case "Légumes"
        '        liste.Items.Clear()
        '        For n = 0 To legumes.Count - 1
        '            liste.Items.Add(legumes(n))
        '        Next
        '    Case "Films"
        '        liste.Items.Clear()
        '        For n = 0 To legumes.Count - 1
        '            liste.Items.Add(films(n))
        '        Next
        'End Select
------------------------------------------------------------------------------------------

7 réponses

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
salut,
difficile de voir exactement ce que tu veux faire

sur le principe OK (cf la suite), mais dans le code que tu indiques...
voici les erreurs :

dans l'évènment ~indexchanged, tu veux envoyer la chaine sélectionnée
ok, normal
mais regarde :

Private Sub ComboBox1_SelectedIndexChanged(...) Handles cbchoix.SelectedIndexChanged
  s = cbchoix.SelectedItem

OK le handle est attaché au ComboBox1, mais il y a de quoi vite faire des erreurs

Private Sub afficheListe(ByRef listeChoix As String)
(...)
liste.Items.Clear()
  For n = 0 To listeChoix.Count - 1
    liste.Items.Add(listeChoix(n))
  Next

tu remplies 3 tableaux mais tu veux remplir ta listbox depuis aucun des 3 ?
listechoix est ta chaine en paramètre, que tu utilises ensuite comme tableau (donc tableau de char)

pareil, côté pratique, une listbox nommée LISTE, pas extra pour s'y retrouver

ouvre un nouveau projet, sur la form pose une combobox et une listbox
(j'ai laissé les noms par défaut)

ajoute une classe, nommée clsTable

voici une manière de procéder :




'*********************************************************


'classe clsTable.vb


'*********************************************************


Public Class clsTable

    Public Values As New List(Of String)

    'ici tu déclares tes éléments en rapport avec la base de données

    Public Sub New()
        'ici tu ouvres la connexion à la base de donnée
    End Sub

    Public Sub Load(ByVal sTableName As String)
        Me.Values.Clear()

        Dim sql As String = "SELECT * FROM [" & sTableName & "];"

        'ici tu fais ta requête vers la DB....
        'puis tu remplies VALUES depuis le retour d'execution

        'pour l'exemple on va remplir comme dans ton exemple : à la main

        'valeurs
        Dim sTempValues As String = String.Empty
        Select Case sTableName
            Case "Auto" :  sTempValues = "Firebird;Mustang;Charger;Challenger;Corvette"
            Case "Legumes" :  sTempValues = "Carotte;Navet;Radis;Choux Fleur;Pomme de Terre"
            Case "Films" :  sTempValues = "Evil Dead;Brain Dead;Fredy;Jason;Resident Evil"
        End Select

        'boucle plus ou moins comme tu auras avec la db
        For Each s As String In sTempValues.Split(";"c)
            Me.Values.Add(s)
        Next s
    End Sub

    Public Sub Dispose()
        'ici tu fermes et détruit tous tes objets en rapport à la db

        'et on va détruire la liste
        Me.Values.Clear()
        Me.Values = Nothing
    End Sub
End Class
'*********************************************************

'*********************************************************
'form Form1.vb
'DANS TA FORM, CONTENANT UNE COMBOBOX1 ET UNE LISTBOX1
'*********************************************************
Public Class Form1
    Private dbData As clsTable

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        With ComboBox1
            .DropDownStyle = ComboBoxStyle.DropDownList
            .Items.Add("Auto")
            .Items.Add("Legumes")
            .Items.Add("Films")
        End With

        dbData = New clsTable
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        dbData.Dispose()
    End Sub

    Private Sub ComboBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedIndexChanged
        ListBox1.DataSource = Nothing
        ListBox1.Items.Clear()
        dbData.Load(ComboBox1.SelectedItem)
        ListBox1.DataSource = dbData.Values
    End Sub
End Class

<!-- Coloration syntaxique vb/vba/vb.net : http://charles.racaud.free.fr/code-syntaxing/ -->
Coloration syntaxique vb/vba/vb.net









j'espère que c'est déjà un peu plus clair
(NB : sous VS2008)

++

Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
oui c'est faisable, puisque c'est le cas :)
regarde, on passe par un list(of string) utilisé en DATASOURCE

(éventuellement garder stablename en propriété)


la requête est faite mais évidemment je n'ai pas mis de code en rapport avec la table, donc tableau temporaire.
j'ai tout indiqué en commentaires

ou alors je n'ai pas compris ta question
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

J'oubliais de dire que pour le moment tout ce que ca fait c'est d'afficher le nom de ma string(combobox.selecteditem) dans le listbox quand j'entre dans la boucle "for", et ca sort un peu comme ceci:

Si selecteditem est Auto alors dans le listbox on verra:
A
u
t
o

Si selecteditem est Legumes alors ce sera:
L
e
g
u
m
e
s

Vous figurer le principe!...
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Salut,
j'avais probablement mal exposer mon "probleme" et du fait meme j'ai ete mal compris.

Par contre ton code me sera utile pour autre chose a laquel j'avais un probleme donc rien n'est perdu.

Merci! ;)
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
35
... donc quel est le problème?
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Grr..... je deteste le fait qu'on ne peut pas editer nos propre message sur ce forum.

J'ai poster trop rapidement, en gros tu a repondu a deux de mes questions dont un concernant ma question plus haut, donc toute est regler.

Ce que je me demandais c'est si c'etais possible de faire en sorte que si le choix du combobox etais "Auto" alors il est automatquement relier a la table "auto()" dans la function pour que je puisse travailler avec elle.

Merci de ton temps!
Messages postés
60
Date d'inscription
jeudi 30 avril 2009
Statut
Membre
Dernière intervention
28 novembre 2009

Tout est parfait, merci! :)