.NET WinForms组合框绑定源和数据绑定问题

时间:2011-08-01 01:15:59

标签: .net winforms data-binding combobox bindingsource

我创建了以下类来为一个人建模:

namespace DataBindingTest
{
    public enum colorEnum
    {
        Red,
        Green,
        Yellow,
        Blue,
    }

    class Person
    {
        private string _Name;
        private int _Age;
        private colorEnum _FavoriteColor;
        private bool _HasAllergies;

        public string Name
        {
            get { return _Name; }
            set { _Name = value; }
        }

        public int Age
        {
            get { return _Age; }
            set { _Age = value; }
        }

        public colorEnum FavoriteColor
        {
            get { return _FavoriteColor; }
            set { _FavoriteColor = value; }
        }

        public bool HasAllergies
        {
            get { return _HasAllergies; }
            set { _HasAllergies = value; }
        }

    }
}

在我的主窗体上,我有一个将绑定到Person对象数组的组合框。当我从这个组合框中选择一个人时,我想显示他们的年龄(在NumericUpDown控件中),他们是否有过敏(作为复选框)和他们喜欢的颜色(在DropDownStyle设置为DropDownList的另一个组合框中)。为实现这一目标,我有:

  1. 在我的表单中添加了一个comboBox(comboBoxPeople),一个NumericUpDown控件,一个checkBox和另一个comboBox(comboBoxFavoriteColor)。
  2. 从我上面声明的Person类创建一个新的DataSource
  3. 在表格中添加了BindingSource
  4. 将BindingSource的DataSource属性设置为#2中定义的DataSource。
  5. 将comboBoxPeople的DataSource设置为BindingSource,将DisplayMember设置为BindingSource的Name属性
  6. 我已将BindingSource的Age属性绑定到NumericUpDown控件,并将BindingSource的HasAlergies属性绑定到checkBox控件
  7. 在我的构造函数中,我创建了一个包含3个Person对象的数组,定义了它们的所有属性,然后将BindingSource的DataSource属性设置为此数组
  8. 到目前为止,一切都按预期工作。现在我想在comboBoxFavoriteColor中显示该人最喜欢的颜色(即BindingSource的FavoriteColor属性)。我已经将DropDownStyle设置为DropDownList,因为FavoriteColor是一个枚举。但是,我不清楚我应该如何绑定这个comboBox,以便1)包含FavoriteColor枚举值,2)当我从comboBoxPeople中选择一个人时,将相应的颜色设置为SelectedItem。谁能给我一个关于此的想法?非常感谢!

2 个答案:

答案 0 :(得分:2)

你可以像汤姆建议的那样做,但至少有一种简单的方法可以做到这一点,而不必将Person.FavoriteColor改为字符串。

向名为FavoriteColorString的人员添加属性:

public class Person 
{
    [...]
    public colorEnum FavoriteColor { get; set; }
    public string FavoriteColorString
    {
        get { return FavoriteColor.ToString(); }
        set { FavoriteColor = (colorEnum)Enum.Parse(typeof(colorEnum), value);  }
    }
}

重新编译,以便新属性显示在bindingsource中。

现在将comboBoxFavoriteColor.SelectedItem绑定到FavoriteColorString

在运行时,就像汤姆所说的那样:

comboBoxFavoriteColor.DataSource = Enum.GetNames(typeof(colorEnum));

瞧!它应该按照你想要的方式工作。

当您持久保存设置对象时,只需不要保留FavoriteColorString属性。

答案 1 :(得分:1)

你需要按照这些方针做点什么:

    string[] colors = Enum.GetNames(typeof(colorEnum));
    this.comboBox1.DataSource = colors;

..为了方便起见,只需将喜爱的颜色存储为string类型,而不是colorEnum