Как привязать список к ComboBox?

Я хочу подключить BindingSource к списку объектов класса, а затем значение объекта к ComboBox.
Кто-нибудь может подсказать, как это сделать?

public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }

    public Country()
    {
        Cities = new List<City>();
    }
}

- это мой класс, и я хочу связать его поле name с BindingSource, который затем может быть связан с ComboBox

92 голоса | спросил Mobin 2 MaramMon, 02 Mar 2009 02:59:23 +03002009-03-02T02:59:23+03:0002 2009, 02:59:23

6 ответов


0

Поскольку вы имеете в виду комбинированный список, я предполагаю, что вы не хотите использовать двухстороннюю привязку данных (если так, посмотрите на использование BindingList)

public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }
    public Country(string _name)
    {
        Cities = new List<City>();
        Name = _name;
    }
}



List<Country> countries = new List<Country> { new Country("UK"), 
                                     new Country("Australia"), 
                                     new Country("France") };

bindingSource1.DataSource = countries;

comboBox1.DataSource = bindingSource1.DataSource;

comboBox1.DisplayMember = "Name";
comboBox1.ValueMember = "Name";
ответил Mitch Wheat 2 MaramMon, 02 Mar 2009 03:21:57 +03002009-03-02T03:21:57+03:0003 2009, 03:21:57
0

Для фона есть 2 способа использования ComboBox /ListBox

1) Добавьте объекты страны в свойство «Элементы» и извлеките страну как выбранный элемент. Чтобы использовать это, вы должны переопределить ToString of Country.

2) Используйте DataBinding, задайте для источника данных IList (List <>) и используйте DisplayMember, ValueMember и SelectedValue

Для 2) сначала вам понадобится список стран

// not tested, schematic:
List<Country> countries = ...;
...; // fill 

comboBox1.DataSource = countries;
comboBox1.DisplayMember="Name";
comboBox1.ValueMember="Cities";

А затем в SelectionChanged,

if (comboBox1.Selecteditem != null)
{
   comboBox2.DataSource=comboBox1.SelectedValue;

}
ответил Henk Holterman 2 MaramMon, 02 Mar 2009 03:22:05 +03002009-03-02T03:22:05+03:0003 2009, 03:22:05
0
public MainWindow(){
    List<person> personList = new List<person>();

    personList.Add(new person { name = "rob", age = 32 } );
    personList.Add(new person { name = "annie", age = 24 } );
    personList.Add(new person { name = "paul", age = 19 } );

    comboBox1.DataSource = personList;
    comboBox1.DisplayMember = "name";

    comboBox1.SelectionChanged += new SelectionChangedEventHandler(comboBox1_SelectionChanged);
}


void comboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    person selectedPerson = comboBox1.SelectedItem as person;
    messageBox.Show(selectedPerson.name, "caption goes here");
}

бум.

ответил Robert Tonnessen 21 +04002011-10-21T01:37:31+04:00312011bEurope/MoscowFri, 21 Oct 2011 01:37:31 +0400 2011, 01:37:31
0

Попробуйте что-то вроде этого:

yourControl.DataSource = countryInstance.Cities;

И если вы используете WebForms, вам нужно добавить эту строку:

yourControl.DataBind();
ответил Andrew Hare 2 MaramMon, 02 Mar 2009 03:03:18 +03002009-03-02T03:03:18+03:0003 2009, 03:03:18
0
public class Country
{
    public string Name { get; set; }
    public IList<City> Cities { get; set; }

    public Country()
    {
        Cities = new List<City>();
    }
}

public class City 
{
    public string Name { get; set; } 
}

List<Country> Countries = new List<Country>
{
    new Country
    {
        Name = "Germany",
        Cities =
        {
            new City {Name = "Berlin"},
            new City {Name = "Hamburg"}
        }
    },
    new Country
    {
        Name = "England",
        Cities =
        {
            new City {Name = "London"},
            new City {Name = "Birmingham"}
        }
    }
};
bindingSource1.DataSource = Countries;
member_CountryComboBox.DataSource = bindingSource1.DataSource;
member_CountryComboBox.DisplayMember = "Name";
member_CountryCombo

Box.ValueMember = "Name";

Это код, который я сейчас использую.

ответил Mobin 2 MaramMon, 02 Mar 2009 03:38:09 +03002009-03-02T03:38:09+03:0003 2009, 03:38:09
0

Если вы используете ToolStripComboBox, источник данных не раскрывается (.NET 4.0):

List<string> someList = new List<string>();
someList.Add("value");
someList.Add("value");
someList.Add("value");

toolStripComboBox1.Items.AddRange(someList.ToArray());
ответил John M 24 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 24 Sep 2012 23:30:02 +0400 2012, 23:30:02

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132