14 votes

Définir SelectedItem sur une combobox liée à une source de données

List<Customer> _customers = getCustomers().ToList();
BindingSource bsCustomers = new BindingSource();
bsCustomers.DataSource = _customers;
comboBox.DataSource = bsCustomers.DataSource;
comboBox.DisplayMember = "name";
comboBox.ValueMember = "id";

Maintenant, comment puis-je définir l'élément de la combobox à autre chose que le premier de la liste ? J'ai essayé comboBox.SelectedItem = someCustomer ; ...et beaucoup d'autres choses, mais sans succès jusqu'à présent...

14voto

Claudio Redi Points 34297

Vous devriez faire

comboBox.SelectedValue = "valueToSelect";

ou

comboBox.SelectedIndex = n;

ou

comboBox.Items[n].Selected = true;

2voto

Votre code de liaison n'est pas complet. Essayez ceci :

BindingSource bsCustomers = new BindingSource();
bsCustomers.DataSource = _customers;

comboBox.DataBindings.Add(
    new System.Windows.Forms.Binding("SelectedValue", bsCustomers, "id", true));
comboBox.DataSource = bsCustomers;
comboBox.DisplayMember = "name";
comboBox.ValueMember = "id";

Dans la plupart des cas, vous pouvez accomplir cette tâche dans le concepteur, au lieu de le faire en code.

Commencez par ajouter une source de données dans la fenêtre "Sources de données" de Visual Studio. Ouvrez-la à partir du menu View > Other Windows > Data Sources . Ajouter une source de données Objet de Customer type. Dans les Sources de données, vous verrez les propriétés du client. Par un clic droit sur les propriétés, vous pouvez changer le contrôle par défaut qui lui est associé.

Maintenant, vous pouvez simplement faire glisser une propriété de la fenêtre des sources de données vers votre formulaire. Visual Studio ajoute automatiquement un BindingSource et un BindingNavigator à votre formulaire lorsque vous déposez le premier contrôle. Le site BindingNavigator est facultatif et vous pouvez le supprimer sans risque, si vous n'en avez pas besoin. Visual Studio se charge également de tout le câblage. Vous pouvez le modifier dans la fenêtre des propriétés. Cela est parfois nécessaire pour les boîtes combo.

Il ne reste qu'une seule chose à faire dans votre code : Assigner une source de données réelle à la source de liaison :

customerBindingSource.DataSource = _customers;

1voto

Raihan Al-Mamun Points 267

Cela fonctionne pour moi

bsCustomers.Position = comboBox.Items.IndexOf(targetCustomer);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X