Привязка универсального списка <string>к ComboBox - PullRequest
17 голосов
/ 23 октября 2009

У меня есть ComboBox, и я хочу привязать к нему общий список. Кто-нибудь может понять, почему код ниже не будет работать? В источнике привязки есть данные, но он не заполнит источник данных ComboBox.

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

На заметку: неужели плохо передавать экземпляр класса?

Спасибо!

Ответы [ 5 ]

30 голосов
/ 23 октября 2009

Вам необходимо вызвать метод Bind:

cbxProjectd.DataBind();

Если это для winforms, то вам нужно убедиться, что то, что у вас есть, вызывается, работает следующее:

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

Хотя вы можете установить источник данных ComboBox напрямую со списком.

4 голосов
/ 03 января 2013

это простой способ (он работает правильно):

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 голосов
/ 07 февраля 2016

Используя приведенный выше код Юрия Факторовича, вот как получить список дат в формате LongDateString за заданное количество недель и назначить их в поле со списком. Используется «Понедельник», но вы можете просто заменить «Понедельник» любым другим DOW в соответствии с вашими целями:

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;
}

... и, если вы хотите добавить фактическую дату в поле со списком, вы также можете использовать словарь так:

    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 голосов
/ 15 ноября 2015

Вот довольно простой способ, который не использует BindingSource:

сначала добавьте общий список строк, возможно, в класс "consts / utils":

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

А вот как вы добавляете эти строки в поле со списком:

comboBoxMonth.Items.AddRange(UsageRptConstsAndUtils.Months.ToArray<object>());
0 голосов
/ 08 января 2014
BindingSource bs = new BindingSource();
bs.DataSource = getprojectname();
comboBox1 = new ComboBox();
comboBox1.DataSource = bs;
...