Bonjour tous le monde
je veux mettre deux combo box en cascade .
prière de me idée
Version imprimable
Bonjour tous le monde
je veux mettre deux combo box en cascade .
prière de me idée
D'accord,mais s'il te plaît,donne un peu plus de détails sur ce que tu souhaite vraiment.
Un exemple pourra nous mettre sur la voie.;)
OK, merci pour votre réponse
vous trouverez ci-jointe deux fichiers texte contiennent la démarche que 'ai utilisé mais malheureusement je ne trouve pas aucun résultat avec cette démarche
Merci d'avance
Ok, donc si je comprends bien (en m'inspirant de l'image), tu as deux combobox (client et affaire).
Le combobox client doit afficher comme son nom l'indique le nom des clients.Mais étant donné que tes deux combobox devront être en cascade, que doit alors afficher le combobox affaire?
Par exemple,la liste des affaire liées au client?
Bonjour Mr Abbé Assy et vraiment merci beaucoup pour me répondre
oui, exactement j'ai deux combo box , le premier m'affiche la liste des clients et la deuxième m'affiche la liste des affaires lier a la client suivant la sélection de la client de la combo box N° 1.
Par exemple : si je choisie la client N°2 (Nicolas) il me donne automatiquement dans la combo box 2 la liste des affaires lier à ce client (CD00001/15 ; CD0124/15 ; CD455/14 ; CD758/14 )
Merci d'avance
Bonjour
1 Une requête pour obtenir le id_client selon le item choisi par le combo client
2 une requête pour obtenir la liste des affaires selon le id-client
et remplir le combo affaire
Bonjour Mr shayw
oui exactement Mr shayw , mais je ne sais pas comme faire ça , j'ai fais une démarche mais malheureusement je ne trouve aucun résultat
Pièce jointe 175628 // Pièce jointe 175629
Dans tes deux tables, y a t-il un élément commun?
J'ai pour habitude d'utiliser des informations d'une même table.Alors,je vais chercher sur deux tables.
Ok,sur mon poste,j'utilise aussi mysql workbrench comme système de gestion de base de donnée (qui n'est pas si différent de sql server au niveau du code).
j'ai deux tables (factures et clients) appartenant à la base de donnée fact et j'ai crée deux combobox (combobox1 et combobox2).
Je veux selectionné dans le combobox1 le nom du client (denomination) et dans le combobox2 la liste de tous ses numéros de factures (numero_facture)
Voici le code :
S'il y a un problème,n'hésite pas à me faire signe.:mrgreen:Code:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 'Importation Imports MySql.Data.MySqlClient Public Class Form1 'Déclarations de variables Dim myConnexion As MySqlConnection Dim myCommand As MySqlCommand 'Au chargement de Form1, on remplit le combobox1 de la liste des clients Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load myConnexion = New MySqlConnection myConnexion.ConnectionString = "server = localhost; userid = root; password = abc; database = fact" Dim Reader As MySqlDataReader 'Affichage de la liste des clients appartenant à la table clients dans le combobox1 Try myConnexion.Open() Dim query As String query = "select denomination from fact.clients" myCommand = New MySqlCommand(query, myConnexion) Reader = myCommand.ExecuteReader While Reader.Read Dim denom = Reader.GetString("denomination") ComboBox1.Items.Add(denom) End While myConnexion.Close() Catch ex As Exception MessageBox.Show(ex.Message) Finally myConnexion.Dispose() End Try End Sub 'Une fois qu'un client est selectionné dans le combobox1,on affiche la liste de tous ses numéros de factures (numero_facture) dans le combobox2 Private Sub ComboBox1_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox1.SelectedIndexChanged myConnexion = New MySqlConnection myConnexion.ConnectionString = "server = localhost; userid = root; password = abc; database = fact" Dim Reader As MySqlDataReader Try myConnexion.Open() Dim query As String query = "select numero_facture from facturplus.factures where denomination = '" & ComboBox1.Text & "'" myCommand = New MySqlCommand(query, myConnexion) Reader = myCommand.ExecuteReader 'Affichage de tous les numeros de factures du client (numero_facture) appartenant à la table factures dans le combobox2 While Reader.Read Dim compte = Reader.GetString("numero_facture") ComboBox2.Items.Add(compte) End While myConnexion.Close() Catch ex As Exception MessageBox.Show(ex.Message) Finally myConnexion.Dispose() End Try End Sub End Class
et d'abord ton combo client c'est les noms des clients mais quoi (le champ client _ste ?)
il peut y avoir deux Nicolas
Oui ; "client_ste" c'est le nom de client et l'autre c'est Nom de la "personne à contacter "
je utilise ces informations pour le fiche de la contact des clients , si j'ai une personne particulier ou une société j'ai besoins la personne à contacter
bon pour la combobox 1 je utilise le "Client_ste"
j'ai utilisé la Sql Server 2005 et la visual studio 2005
bah il y a un petit problème comment vas tu procéder si tu as plus d' un client avec le même nom ?Citation:
bon pour la combobox 1 je utilise le "Client_ste"
As-tu essayé d'adapter le code que je t'ai donné? J'ai mis des commentaires afin que tu puisses te repérer.
Bah sinon pour éviter de t'emmêler les pinceaux au cas où tu as deux clients avec le nom,tu pourrais leur ajouter une petite précision par exemple!
Leurs prénoms!:)
je suis entrain d'adapter , je fais quelques changements car il y a une petite différence entre mysql et sql
Merci à vous
j'ai fais l'adaptation du programme , et il m'affiche ce message
Citation:
La conversion de la chaîne "client_ste" en type 'integer' n'est pas valide
salut ;
j'ai adapté le code mais je trouve un message d'erreur m'indiquant
et si je changeCitation:
La conversion de la chaîne "client_ste" en type 'integer' n'est pas valide
parCode:
1
2 Dim denom = Reader.GetString("client_ste") C1.Items.Add(denom)
il m'affiche ce message :Code:
1
2 Dim denom = Reader.item("client_ste") C1.Items.Add(denom)
Citation:
La propriété connectionstring n'a pas été initialisée
Fais voir ton code.
Voici Mon Code la combobox N1 est fonctionne mais lorsque je choisie un nom de client m'affiche que:calim2:Citation:
la propriété connectionstring n'a pas été initialisée
Code:
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64 Imports System.Data.SqlClient Imports System.Globalization Public Class PrTeste Dim winclass As New classuser Dim cmd As New SqlCommand Private Sub PrTeste_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load Dim Reader As SqlDataReader If classuser.sqlcon.State = ConnectionState.Open Then classuser.sqlcon.Close() End If 'Affichage de la liste des clients appartenant à la table clients dans le combobox1 Try classuser.sqlcon.Open() Dim query As String query = "select client_ste from client" cmd = New SqlCommand(query, classuser.sqlcon) Reader = cmd.ExecuteReader While Reader.Read Dim denom = Reader.Item("client_ste") C1.Items.Add(denom) End While classuser.sqlcon.Close() Catch ex As Exception MessageBox.Show(ex.Message) Finally classuser.sqlcon.Dispose() End Try End Sub Private Sub C1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles C1.SelectedIndexChanged classuser.sqlcon = New SqlConnection If classuser.sqlcon.State = ConnectionState.Open Then classuser.sqlcon.Close() End If Dim Reader As SqlDataReader Try classuser.sqlcon.Open() Dim query As String query = "select affaire from Traveaux where client = '" & C1.Text & "'" cmd = New SqlCommand(query, classuser.sqlcon) Reader = cmd.ExecuteReader 'Affichage de tous les affaires du client (affaire) appartenant à la table Traveaux dans le combobox2 While Reader.Read Dim compte = Reader.GetString("affaire") C2.Items.Add(compte) End While classuser.sqlcon.Close() Catch ex As Exception MessageBox.Show(ex.Message) Finally classuser.sqlcon.Dispose() End Try End Sub
Heureux que tes recherches t'aient amené à découvrir tes erreurs de code :D
Revois deuxième chaîne de caractère query.
Tu as écris :Ecrit plutôt :Code:query = "select affaire from traveaux where client = '" & C1.SelectedIndex & "'"
car ce n'est pas l'index qu'il doit choisir mais la valeur (Text) insérée dans C1.Code:query = "select affaire from traveaux where client = '" & C1.Text & "'"
Cela devrait marcher à présent.
Code:
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 Private Sub C1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles C1.SelectedIndexChanged classuser.sqlcon = New SqlConnection classuser.sqlcon.ConnectionString = "Data Source=SQL\GAM;Initial catalog=suivieDGAM;Integrated security=true" If classuser.sqlcon.State = ConnectionState.Open Then classuser.sqlcon.Close() End If Dim Reader As SqlDataReader Try classuser.sqlcon.Open() Dim query As String query = "select affaire from traveaux where client = '" & C1.Text & "'" cmd = New SqlCommand(query, classuser.sqlcon) Reader = cmd.ExecuteReader 'Affichage de tous les affaires du client (affaire) appartenant à la table Traveaux dans le C2 While Reader.Read Dim compte = Reader.Item("affaire") C2.Items.Add(compte) End While classuser.sqlcon.Close() Catch ex As Exception MessageBox.Show(ex.Message) Finally classuser.sqlcon.Dispose() End Try
Bonjour
Merci pour votre Réponse et j'ai compris votre explication , mais lorsque je changeversCode:'" & C1.SelectedIndex & "'"
voire le message que je trouve lorsque je choisie un clientCode:'" & C1.Text & "'"
Par ce que j'ai déclaré dans la table SQL comme ce dessous
MErci
Il va te falloir revoir les types de variable que tu assignes à tes variables.De là vient le problème.
Pour commencer,change la variable client en type text ou varchar.
Il suffit de regarder le shema du post 3
Faux c'est l'id correspondant à la valeur text
Surement pas, la table n'a pas à être modifiée pour adapter au code (client est une cle étrangère de la table travaux)
Il faut utiliser les requêtes paramétrées. Voir Tuto ou Faq.
voir du coté de DisplayMember, ValueMember, DataSource. (avec un objet métier ou un dataset)
Je pense qe la lecture du Cours VB.NET de Philippe Lasserre qui est une mine d'information, très bien pour apprendre, vous sera utile a tous les deux.
Un exemple : avec objet métier (simplifié)
La classe représentant un client
Def de la liste clientCode:
1
2
3
4
5
6
7
8 Class client Property Id As Integer Property Nom As String Sub New(UnId As Integer, UnNom As String) Id = UnId Nom = UnNom End Sub End Class
Alimentation de la comboboxCode:Dim clients As List(Of client) = New List(Of client)
visu id du client choisitCode:
1
2
3
4
5
6
7
8
9
10
11 Sub chargeClient() clients.Add(New client(1, "Paul")) ' remplacer par les éléments lu par la requête sur les clients (qui ramene l'id et le nom) clients.Add(New client(2, "Philippe")) clients.Add(New client(2, "Louis")) cboClient.DisplayMember = "Nom" cboClient.ValueMember = "Id" cboClient.DataSource = clients End Sub
Code:MessageBox.Show(DirectCast(cboClient.SelectedItem, client).Id)
Ok,merci pour l'information.Tout de même,je veuille bien comprendre que tu me dises que mon code n'utilise pas la meilleure manière.Mais de là à me dire que mon code est faux,je ne pense pas que cela soit juste du moment où ce code fonctionne bien chez moi.Pour rappel,j'utilise mysql worbrench.
l'id de la table client est de type integer, la clé étrangère du client dans la table travaux est de type integer (mal nommé je le concéde), on ne recherche donc pas le nom dans la table travaux mais l'id. Ce que ne donne pas la propriété text du textbox donc le code que tu donne pour bt-med est faux même s'il fonctionne chez toi parceque le principe qu'il utilise n'est pas le même
Donc cette ligne de code que tu donne
est fause (voir schema table ci joint)
C'est gentil de vouloir aider mais il faut maîtriser sinon on embrouille son interlocuteur
Merci "rv26t" pour ton aide , et je sais que il y a une petite erreur , car si je changeparCode:'" & C1.Text & "'"
la combobox de l'affaire fonctionne mais me donne une liste des affaires quelconque , pas suivant la choix de la 1er combobox . Mais je ne sais est ce que mon erreur au niveau de les tables SQL ou au niveau de la code .ainsi si je changeCode:'" & C1.SelectedIndex & "'"
par un numéro de l'id de client par exemple je mes '2' , la comobobx N2 de la affaire me donne la liste correcte des affaires suivant la client avec id =2 .Code:'" & C1.Text & "'"
s'il te plais aider moi quelle est mon erreur pour résoudre cette problème
et Merci d'avance
Il ne faut pas utiliser l'index (qui est la position dans la liste) mais adapter le code que je vous ai donné qui fournira l'id client
J'avais quelques urgences à traiter,
Mais voici le principe
La classe (allégée) client
La lecture de la table client, ou l'on récupère l'id et le nom. Grace auquel on construit la liste des clients (id, nom)Code:
1
2
3
4
5
6
7
8 Class client Property Id As Integer Property Nom As String Sub New(UnId As Integer, UnNom As String) Id = UnId Nom = UnNom End Sub End Class
Placer la bonne connexion à la place de "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=d:\data\personnes\personnes.accdb".Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 Dim clients As List(Of client) = New List(Of client) ' défini la liste des clients et la cré Sub chargeListeClient() Using cn As New OleDbConnection("PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=d:\data\personnes\personnes.accdb"), _ cmd As New OleDbCommand("select idclient, client_ste from client", cn) Try cn.Open() Using reader As OleDbDataReader = cmd.ExecuteReader() If reader.HasRows Then Do While reader.Read() clients.Add(New client(reader.GetInt32(0), reader.GetString(1))) ' insére un nouveau client à la liste des clients (id et nom) Loop Else MessageBox.Show("aucun client.") End If reader.Close() End Using Catch ex As Exception MsgBox(ex.ToString) End Try End Using End Sub
Remplacer les oledb... par les sql... (OleDbConnection, OleDbCommand, OleDbDataReader)
Lier la liste client à la combobox (dans la classe client nous avons défini les propriété Id et Nom qui représente le client)
dans le loadCode:
1
2
3
4
5 Sub SetComboClient() cboClient.DisplayMember = "Nom" cboClient.ValueMember = "Id" cboClient.DataSource = clients End Sub
A la sélection utilisation de l'idCode:
1
2 chargeListeClient() 'charge la liste SetComboClient() 'lien combo - liste
Sur selection de Nicolas vous avez bien l'id 2Code:MessageBox.Show(DirectCast(cboClient.SelectedItem, client).Id) ' donne l'id par rapport client sélectionné
[Edit] Si vous bloquez montrez le code. (eventuellement indiquez l'erreur s'il y a)
Bonjour Mr : Abbé Assy
Ce code faut il changer par :Code:query = "select affaire from traveaux where client = '" & C1.Text & "'"
parce que la liaison entre table cliens et affaires c'est IdClient pour faire un filtre, par example :Code:query = "select affaire from traveaux where client = '" & C1.selectedValue & "'"
le client avec nom Nicolas a un ID=2 et pour afficher les affaire de ce cleint il faut chercher sur Table traveaux dans la colonne Client qu'on 2 pour afficher ses affaires (CD00001/15 ; CD0124/15 ; CD455/14 ; CD758/14 ).
vola mon code:
'pour charger la combobox Client
'Une fois qu'un client est selectionné dans combobox1,on affiche la liste de tous ses affaires de ce client dans combobox2.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 Private Sub test_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Try cXn.Open() Dim cmd As New SqlCommand("select IdClient,client_ste from cliens ", cXn) Dim da As New SqlDataAdapter(cmd) Dim ds As New DataSet da.Fill(ds, "t") cmbclient.DataSource = ds.Tables("t") cmbclient.DisplayMember = "client_ste " cmbclient.ValueMember = "IdClient" Catch ex As Exception MsgBox(ex.Message) Finally cXn.Close() End Try End Sub
mais la seul problème que je rencontre c'est il m'affiche ce message d'erreur :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Private Sub cmbRegion_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbRegion.SelectedIndexChanged Try Dim ds2 As New DataSet cn.Open() Dim cmd2 As New SqlCommand("select IdAffaire,Affaire from trraveaux WHERE Client=" & cmbClient.SelectedValue & " ", cn) Dim da2 As New SqlDataAdapter(cmd2) da2.Fill(ds2, "t2") CmbAffaire.DataSource = ds2.Tables("t2") CmbAffaire.DisplayMember = "Affaire " CmbAffaire.ValueMember = "IdAffaire" Catch ex As Exception MsgBox(ex.Message) Finally cn.Close() End Try
Merci de m'aider de corriger cet erreur .Code:"L'opérateur '&' n'est pas défini pour chaîne "select IdVille,Designation from " et type 'DataRowView"