【问题标题】:Programmatically generate and assign ComboBox DataSource以编程方式生成和分配 ComboBox 数据源
【发布时间】:2012-12-06 10:36:00
【问题描述】:

我有一个名为 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();

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

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

【问题讨论】:

    标签: c# .net winforms class datasource


    【解决方案1】:

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

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

    【讨论】:

    • 干得好,谢谢。为什么应该是财产?为什么它能识别属性而不识别类字段?
    • @mahditahsildari:这是绑定引擎的实现细节(这个细节适用于 WinForms、WPF 和 SL/WinRT)。使用属性提供数据封装,并且对于数据绑定更重要的是通过INotifyProperyChanged 接口更改通知机制。
    【解决方案2】:

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

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

    【讨论】:

    • 您看过标签“WinForms”吗? DropDownListDataBind 在 asp.net 中
    • 哦对不起@mahditahsildari。我在网络应用程序中遇到了同样的问题。
    猜你喜欢
    • 2019-05-13
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2021-12-15
    • 2011-04-27
    • 1970-01-01
    相关资源
    最近更新 更多