Je veux connecter un BindingSource
à une liste d'objets de classe, puis une valeur d'objets à un ComboBox.
Quelqu'un peut-il suggérer comment le faire?
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country()
{
Cities = new List<City>();
}
}
est ma classe et je veux lier son name
champ à un BindingSource qui pourrait alors être associé à un ComboBox
c#
winforms
data-binding
combobox
Mobin
la source
la source
Réponses:
Comme vous faites référence à une zone de liste déroulante, je suppose que vous ne voulez pas utiliser la liaison de données bidirectionnelle (si c'est le cas, regardez à l'aide de a
BindingList
)Pour trouver le pays sélectionné dans la liste déroulante lié, vous feriez quelque chose comme:
Country country = (Country)comboBox1.SelectedItem;
.Si vous souhaitez que la zone de liste déroulante se mette à jour dynamiquement, vous devez vous assurer que la structure de données que vous avez définie comme
DataSource
implémenteIBindingList
; une telle structure estBindingList<T>
.Conseil: assurez-vous que vous liez le
DisplayMember
à une propriété de la classe et non à un champ public. Si votre classe l'utilise,public string Name { get; set; }
cela fonctionnera mais s'il l'utilise,public string Name;
il ne pourra pas accéder à la valeur et affichera à la place le type d'objet pour chaque ligne de la zone de liste déroulante.la source
bindingSource1
la déclaration?comboBox1.DataSource = bindingSource1.DataSource;
correct? ou ça devrait êtrecomboBox1.DataSource = bindingSource1;
?Pour un document d'information, il existe 2 façons d'utiliser un ComboBox / ListBox
1) Ajoutez des objets Pays à la propriété Items et récupérez un Pays en tant qu'élément sélectionné. Pour l'utiliser, vous devez remplacer la ToString de Country.
2) Utilisez DataBinding, définissez DataSource sur IList (List <>) et utilisez DisplayMember, ValueMember et SelectedValue
Pour 2) vous aurez d'abord besoin d'une liste de pays
Et puis dans SelectionChanged,
la source
boom.
la source
Essayez quelque chose comme ceci:
Et si vous utilisez WebForms, vous devrez ajouter cette ligne:
la source
C'est le code que j'utilise actuellement.
la source
Si vous utilisez un ToolStripComboBox, aucun DataSource n'est exposé (.NET 4.0):
la source
ToolstripComboBox.ComboBox.DataSource
. Cela ressemble àToolstripComboBox
un emballage pour un normalComboBox
.