C# 以编程方式生成和分配ComboBox数据源

C# 以编程方式生成和分配ComboBox数据源,c#,.net,winforms,class,datasource,C#,.net,Winforms,Class,Datasource,我有一个名为cmbWeekDays的组合框,一个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 Week

我有一个名为cmbWeekDays的组合框,一个
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();
列表天数=新列表();
添加(新的工作日{DayName=“Sat”,Index=1});
添加(新的工作日{DayName=“Sun”,Index=2});
添加(新的工作日{DayName=“Mon”,Index=3});
添加(新的工作日{DayName=“Tue”,Index=4});
添加(新的工作日{DayName=“Wed”,Index=5});
添加(新的工作日{DayName=“Thu”,Index=6});
添加(新的工作日{DayName=“Fri”,Index=7});
cmbxWeekDays.DataSource=天;
cmbxWeekDays.DisplayMember=“DayName”;
cmbxWeekDays.ValueMember=“索引”;
cmbxWeekDays.Refresh();
我不知道为什么我会得到这个奇怪的结果:


有人能解释一下发生了什么事吗?以及如何克服这个问题?

数据绑定仅适用于属性。因此,您必须在数据源类中声明属性,而不是字段:

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

尝试以下方法可能会对你有所帮助。我也面临同样的问题。但是我写了cmbyar.Databind()最后它对我有用。所以试一下

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

你看过标签“WinForms”了吗
DropDownList
DataBind
位于asp.netohh sorry@mahditahsildari。我在web应用程序中遇到了同样的问题。干得好,谢谢。为什么应该是财产呢?为什么它识别属性而不识别类字段?@mahditahsildari:这是绑定引擎的一个实现细节(这个细节对于WinForms、WPF和SL/WinRT都是如此)。使用属性可以提供数据封装,并且对于数据绑定更为重要的是,可以通过
inotifypropertychanged
接口更改通知机制。