2009-10-22 19 views
15

Mam ComboBox i chcę powiązać z nim ogólną listę. Czy ktokolwiek może zobaczyć, dlaczego poniższy kod nie zadziała? Źródło wiążące zawiera dane, ale nie wypełnia źródła danych ComboBox.Powiązanie ogólnej listy <string> do ComboBox

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

Na marginesie: czy źle jest omijać wystąpienie klasy?

Dzięki!

+0

Co widzisz? Czy przypisałeś właściwość DisplayMember? –

Odpowiedz

26

Trzeba wywołać metodę Bind:

cbxProjectd.DataBind(); 

Jeśli jest to dla WinForms to trzeba upewnić się, co masz jest nazywa, następujące prace:

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

Chociaż można ustawić DataSource ComboBox bezpośrednio z listą.

+2

Gdzie jest .DataBind? Nie pojawia się w intellisense jako opcja. – Nathan

+0

Jest to dla formularzy internetowych, dla formularzy wygranych odpowiedź powinna działać. Coś jest nie tak w innej części twojego programu. Jeśli odizolujesz swój kod, powinien działać. –

+0

Po prostu wykonałem więcej wykopalisk i znalazłem pochowany wyjątek, który z rozsądku zbankrutował. Dziękuję wszystkim. – Nathan

3

jest to prosty sposób (działa poprawnie):

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
BindingSource bs = new BindingSource(); 
bs.DataSource = getprojectname(); 
comboBox1 = new ComboBox(); 
comboBox1.DataSource = bs; 
0

Oto dość prosty sposób, że nie używa BindingSource:

pierwszy, dodaj rodzajowe listy ciąg Być może do klasy „consts/utils”:

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

a oto jak dodać te ciągi do pola kombi:

comboBoxMonth.Items.AddRange(UsageRptConstsAndUtils.Months.ToArray<object>()); 
0

Korzystanie kod Jurija Faktorowicz jest powyżej jako podstawa, tutaj jest to, jak uzyskać listę dat w formacie LongDateString dla danej liczby tygodni i przypisać je do pola kombi. Używa „Poniedziałek”, ale można po prostu zastąpić „Poniedziałek” z jakiejkolwiek innej DOW do własnych celów:

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

... a jeśli chcesz dodać faktyczną datę do pola kombi, zbyt, ty może używać takiego słownika:

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; 
} 
Powiązane problemy