[C#][2.0]BindingSource et ComboBox. Event SelectedIndexChanged appelé plusieurs fois.
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:
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:
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.