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.