web-dev-qa-db-fra.com

Définir SelectedItem sur une liste déroulante 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 définir l'élément de la liste déroulante sur autre chose que le premier de la liste? Essayé ComboBox.SelectedItem = someCustomer; ... et beaucoup d'autres choses, mais non chance jusqu'ici ...

11
mdc

Tu devrais faire

comboBox.SelectedValue = "valueToSelect";

ou 

comboBox.SelectedIndex = n;

ou 

comboBox.Items[n].Selected = true;
13
Claudio Redi

Votre code de liaison n'est pas complet. Essaye ça:

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-le depuis le menu Affichage> Autres fenêtres> Sources de données . Ajoutez une source de données d'objet de type Customer. 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 modifier le contrôle par défaut qui lui est associé.

Maintenant, vous pouvez simplement faire glisser une propriété de la fenêtre Sources de données vers votre formulaire. Visual Studio ajoute automatiquement les composants BindingSource et BindingNavigator à votre fiche lorsque vous supprimez le premier contrôle. La BindingNavigator est facultative et vous pouvez la supprimer en toute sécurité si vous n'en avez pas besoin. Visual Studio fait également tout le câblage. Vous pouvez le modifier à travers la fenêtre des propriétés. Parfois, cela est nécessaire pour les boîtes à options.

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

customerBindingSource.DataSource = _customers;

ça marche pour moi

bsCustomers.Position = comboBox.Items.IndexOf(targetCustomer);
0
Raihan Al-maMun