Binding a generic List to a ComboBox

后端 未结 6 1533
轻奢々
轻奢々 2020-12-16 13:07

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

相关标签:
6条回答
  • 2020-12-16 13:33

    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;
    
    0 讨论(0)
  • 2020-12-16 13:46

    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>());
    
    0 讨论(0)
  • 2020-12-16 13:48
    BindingSource bs = new BindingSource();
    bs.DataSource = getprojectname();
    comboBox1 = new ComboBox();
    comboBox1.DataSource = bs;
    
    0 讨论(0)
  • 2020-12-16 13:48

    If anyone finds this necro thread, make sure your list does not contain null items. Otherwise binding will fail silently!

    //This will not work!
    comboBox1.DataSource = new List<string> { "test1", null, "test2" };
    
    //This is legit!
    comboBox1.DataSource = new List<string> { "test1", "", "test2" };
    
    0 讨论(0)
  • 2020-12-16 13:50

    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.

    0 讨论(0)
  • 2020-12-16 13:55

    Using Yuriy Faktorovich's code above as a basis, here is how to get a list of dates in LongDateString format for a given number of weeks, and assign them to a combo box. This uses "Monday" but you can simply replace "Monday" with any other DOW to suit your purposes:

    private void PopulateSchedulableWeeks()
    {
        int WEEKS_COUNT = 13;
        List<String> schedulableWeeks = PlatypusUtils.GetWeekBeginnings(WEEKS_COUNT).ToList();
        BindingSource bs = new BindingSource();
        bs.DataSource = schedulableWeeks;
        comboBoxWeekToSchedule.DataSource = bs;
    }
    
    public static List<String> GetWeekBeginnings(int countOfWeeks)
    {
        // from http://stackoverflow.com/questions/6346119/datetime-get-next-tuesday
        DateTime today = DateTime.Today;
        // The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
        int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7;
        DateTime nextMonday = today.AddDays(daysUntilMonday);
    
        List<String> mondays = new List<string>();
        mondays.Add(nextMonday.ToLongDateString());
    
        for (int i = 0; i < countOfWeeks; i++)
        {
            nextMonday = nextMonday.AddDays(7);
            mondays.Add(nextMonday.ToLongDateString());
        }
        return mondays;
    }
    

    ...and, if you want to add the actual date to the combo box, too, you can use a Dictionary like so:

        int WEEKS_TO_OFFER_COUNT = 13;
        BindingSource bs = new BindingSource();
        Dictionary<String, DateTime> schedulableWeeks = AYttFMConstsAndUtils.GetWeekBeginningsDict(WEEKS_TO_OFFER_COUNT);             bs.DataSource = schedulableWeeks;
        comboBoxWeekToSchedule.DataSource = bs;
        comboBoxWeekToSchedule.DisplayMember = "Key";
        comboBoxWeekToSchedule.ValueMember = "Value";
    
    public static Dictionary<String, DateTime> GetWeekBeginningsDict(int countOfWeeks)
    {
        DateTime today = DateTime.Today;
        // The (... + 7) % 7 ensures we end up with a value in the range [0, 6]
        int daysUntilMonday = ((int)DayOfWeek.Monday - (int)today.DayOfWeek + 7) % 7;
        DateTime nextMonday = today.AddDays(daysUntilMonday);
    
        Dictionary<String, DateTime> mondays = new Dictionary<String, DateTime>();
        mondays.Add(nextMonday.ToLongDateString(), nextMonday);
    
        for (int i = 0; i < countOfWeeks; i++)
        {
            nextMonday = nextMonday.AddDays(7);
            mondays.Add(nextMonday.ToLongDateString(), nextMonday);
        }
        return mondays;
    }
    
    0 讨论(0)
提交回复
热议问题