以编程方式生成并分配ComboBox数据源

3

我有一个名为cmbWeekDays的ComboBox,以及一个名为WeekDay类:

public class WeekDay
{ 
    public int Index;
    public string DayName;
}

还有这个FormLoad事件:

List<WeekDay> days = new List<WeekDay>();
days.Add(new WeekDay { DayName = "Sat", Index = 1 });
days.Add(new WeekDay { DayName = "Sun", Index = 2 });
days.Add(new WeekDay { DayName = "Mon", Index = 3 });
days.Add(new WeekDay { DayName = "Tue", Index = 4 });
days.Add(new WeekDay { DayName = "Wed", Index = 5 });
days.Add(new WeekDay { DayName = "Thu", Index = 6 });
days.Add(new WeekDay { DayName = "Fri", Index = 7 });

cmbxWeekDays.DataSource = days;
cmbxWeekDays.DisplayMember = "DayName";
cmbxWeekDays.ValueMember = "Index";
cmbxWeekDays.Refresh();

我不知道为什么会得到这个奇怪的结果:

output image

有人能解释一下发生了什么吗?还有如何解决这个问题?

2个回答

2

数据绑定只能与属性一起使用。因此,您必须在数据源类中声明属性而不是字段:

public class WeekDay
{
    public int Index { get; set; }
    public string DayName { get; set; }
}

干得好,谢谢。为什么应该是属性?为什么它能识别属性而不能识别类字段? - Mahdi Tahsildari
1
@mahditahsildari:这是绑定引擎的实现细节(对于WinForms、WPF和SL/WinRT都是如此)。使用属性提供数据封装,而且更重要的是,通过INotifyProperyChanged接口提供了变更通知机制,这对于数据绑定非常重要。 - Dennis

0

尝试以下方法,也许可以帮助您。我也遇到了同样的问题。但是我在最后写了cmbyear.Databind(),这对我有用。所以请尝试一次。

 DropDownList cmbYear = new DropDownList();
        cmbYear.DataSource = days;  
        cmbYear.DataTextField = "Year";
        cmbYear.DataValueField = "YearID";
        cmbYear.DataBind();

你看过“WinForms”标签了吗?DropDownListDataBind是在asp.net中的。 - Mahdi Tahsildari
哦,抱歉 @mahditahsildari。我在 Web 应用程序中遇到了同样的问题。 - Brijesh Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接