[C#] come associare una lista a una casella combinata? (WinForms)


Answers

Per uno sfondo, ci sono 2 modi per usare un ComboBox / ListBox

1) Aggiungi oggetti Paese alla proprietà Items e recupera un Paese come Selecteditem. Per usare questo devi sovrascrivere ToString of Country.

2) Usa DataBinding, imposta il DataSource su un IList (Elenco <>) e usa DisplayMember, ValueMember e SelectedValue

Per 2) è necessario prima un elenco di paesi

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

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

E poi in SelectionChanged,

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

}
Question

Voglio collegare un'origine di associazione a un elenco di oggetti di classe e quindi il valore di oggetti in una casella combinata può chiunque suggerire come farlo

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

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

è la mia classe e voglio associare il suo campo nome a un'origine di associazione che potrebbe essere associata a una casella combinata




Se si utilizza ToolStripComboBox non è presente DataSource esposto (.NET 4.0):

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

toolStripComboBox1.Items.AddRange(someList.ToArray());



Prova qualcosa del genere:

yourControl.DataSource = countryInstance.Cities;

E se stai usando WebForms dovrai aggiungere questa linea:

yourControl.DataBind();