Binding a generic List<string> to a ComboBox

89,916

Solution 1

You need to call the Bind method:

cbxProjectd.DataBind();

If this is for winforms then you need to make sure what you have is being called, the following works:

BindingSource bs = new BindingSource();
bs.DataSource = new List<string> { "test1", "test2" };
comboBox1.DataSource = bs;

Although you can set the ComboBox's DataSource directly with the list.

Solution 2

this is the simple way (it works correctly):

List<string> my_list = new List<string>();
my_list.Add("item 1");
my_list.Add("item 2");
my_list.Add("item 3");
my_list.Add("item 4");
my_list.Add("item 5");
comboBox1.DataSource = my_list;

Solution 3

Here is a rather simple way that doesn't use BindingSource:

first, add the generic list of string, perhaps to a "consts/utils" class:

public static List<string> Months = new List<string>
{
   "Jan",
   "Feb",
   "Mar",
   "Apr",
   "May",
   "Jun",
   "Jul",
   "Aug",
   "Sep",
   "Oct",
   "Nov",
   "Dec"
};

And here's how you add those strings to a combo box:

comboBoxMonth.Items.AddRange(UsageRptConstsAndUtils.Months.ToArray<object>());
Share:
89,916
Nathan
Author by

Nathan

Updated on July 09, 2022

Comments

  • Nathan
    Nathan almost 2 years

    I have a ComboBox and I want to bind a generic List to it. Can anyone see why the code below won't work? The binding source has data in it, but it won't fill the ComboBox data source.

    FillCbxProject(DownloadData Down)
    {
      BindingSource bindingSource = new BindingSource();
      bindingSource.DataSource = Down.ProjectList;
      cbxProjectd.DataSource = bindingSource;
    }
    

    On a side note: Is it bad to pass around an instance of a class?

    Thanks!