Bonjour,
j'ai développé une pop-up qui permet à l'utilisateur de retrouver un client.
Sur cette pop-up, il y a un ComboBox dans lequel se trouve tous les clients.
Lorsqu'il sélectionne le client, les produits attachés à ce client sont retrouvés dans la base de données.
Ainsi sur l'évenement SelectedIndexChanged du combobox, je charge depuis la base de données les produits appartenant au client sélectionné.
Lors de la première ouverture de la pop-up, lorsque l'utilisateur choisit un nouvel élément dans la ComboBox, l'évenement SelectedIndexChanged n'est déclenché qu'une seule fois.
Si l'utilisateur referme la pop-up et la ré-ouvre, lors du changement dans la ComboBox, l'évenement SelectedIndexChanged est délcenché deux fois.
Si je fais comme précedemment, l'évenement est déclenché trois fois, et ainsi de suite...
Je ne comprends pas trop pourquoi.
Voici mon code:
Code c# : 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
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 public class frmRechercheClientProduit:Form { /// <summary> /// Constructeur /// </summary> /// <param name="dsClient">DataSet du client</param> public frmRechercheClientProduit(RemoteAccess remoteAccess, BindingSource bdgSrcClient, BindingSource bdgSrcProduit) { InitializeComponent(); // Initialisation de la liaison de données clientsBindingSource = bdgSrcClient; // Initialisation de la liaison de données des produits produitsBindingSource = bdgSrcProduit; // Initialisation de l'interface d'accès distant m_RemoteAccess = remoteAccess; // Initialisation de la liaison de données du ComboBox sTE_NOMComboBox.DataSource = clientsBindingSource; // Initialisation de la liaison de données de la ListBox listBoxProduits.DataSource = produitsBindingSource; } } /// <summary> /// Modification de la sélection du ComboBox /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void sTE_NOMComboBox_SelectedIndexChanged(object sender, EventArgs e) { LoadProducts(sTE_NOMComboBox.SelectedIndex); } /// <summary> /// Retrouve les produits associés à un client /// </summary> /// <param name="position"></param> private void LoadProducts(int position) { // Vérifie que l'index sélectionné se situe dans les limites acceptable par le CurrencyManager if ((clientsBindingSource.Count >= position) && (position >= 0)) { // Définition de l'index clientsBindingSource.Position = position; // Objet courant sélectionné DataRowView drvR = clientsBindingSource.Current as DataRowView; // Le transtype peut être nul dans le cas l'objet n'est pas transtypable en DataRowView if (drvR != null) { // Retrouve l'Identifiant du client sélectionné int idClient = (int)drvR.Row["STE_ID"]; log.Debug("Chargement des produits"); // Retrouve dans la base de données les produits produitsBindingSource.DataSource = m_RemoteAccess.GestionProduit.LoadProduitByClientId(idClient); log.Debug("Produits chargés"); } } }
Et pour appeler la pop-up:
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 // Appel de la form permettant la sélection du client using (frmRechercheClientProduit frm = new frmRechercheClientProduit(m_RemoteAccess, ClientsBindingSource, ProduitsBindingSource)) { // Affichage de la form frm.ShowDialog(); if (ClientsBindingSource.Current != null) { int idClient = 0; DataRowView rView = ClientsBindingSource.Current as DataRowView; } }
A mon avis, ça doit être lié à l'utilisation des BindingSource.
Merci d'avance pour votre aide.
Partager