Eu quero conectar um BindingSource
a uma lista de objetos de classe e, em seguida, o valor dos objetos a um ComboBox.
Alguém pode sugerir como fazer isso?
public class Country
{
public string Name { get; set; }
public IList<City> Cities { get; set; }
public Country()
{
Cities = new List<City>();
}
}
é minha classe e quero vincular seu name
campo a um BindingSource que pode ser associado a um ComboBox
c#
winforms
data-binding
combobox
Mobin
fonte
fonte
Respostas:
Como você está se referindo a uma caixa de combinação, estou assumindo que você não deseja usar a ligação de dados bidirecional (em caso afirmativo, observe o uso de um
BindingList
)Para encontrar o país selecionado no combobox ligado, você faria algo como:
Country country = (Country)comboBox1.SelectedItem;
.Se você deseja que o ComboBox seja atualizado dinamicamente, você precisará certificar-se de que a estrutura de dados que você configurou como o
DataSource
implementaIBindingList
; uma dessas estruturas éBindingList<T>
.Dica: certifique-se de que você está associando o
DisplayMember
a uma propriedade na classe e não a um campo público. Se sua classe usapublic string Name { get; set; }
, vai funcionar, mas se usarpublic string Name;
, não será capaz de acessar o valor e, em vez disso, exibirá o tipo de objeto para cada linha na caixa de combinação.fonte
bindingSource1
a declaração de?comboBox1.DataSource = bindingSource1.DataSource;
correto? ou deveria sercomboBox1.DataSource = bindingSource1;
?Para um backgrounder, existem 2 maneiras de usar uma ComboBox / ListBox
1) Adicione objetos de país à propriedade de itens e recupere um país como item selecionado. Para usar isso, você deve substituir o ToString de País.
2) Use DataBinding, defina DataSource como IList (List <>) e use DisplayMember, ValueMember e SelectedValue
Para 2) você precisará primeiro de uma lista de países
E então no SelectionChanged,
fonte
estrondo.
fonte
Experimente algo assim:
E se você estiver usando WebForms, você precisará adicionar esta linha:
fonte
Este é o código que estou usando agora.
fonte
Se você estiver usando um ToolStripComboBox, não há DataSource exposta (.NET 4.0):
fonte
ToolstripComboBox.ComboBox.DataSource
. PareceToolstripComboBox
um invólucro para um normalComboBox
.