您好我可能知道如何将下面的枚举值绑定到组合框中吗? 我写了下面的代码,但效果很好,但这是最好的方法。
public enum CourseStudentStatus
{
Active = 1,
Completed = 2,
TempStopped = 3,
Stopped = 4,
}
//Bind Course Status
Dictionary<string, int> list = new Dictionary<string, int>();
foreach (int enumValue in Enum.GetValues(typeof(CourseStudentStatus)))
list.Add(Enum.GetName(typeof(CourseStudentStatus), enumValue), enumValue);
var column = ((DataGridViewComboBoxColumn)dgv.Columns["studentCourseStatus"]);
column.DataPropertyName = "StudentStatus";
column.DisplayMember = "Key";
column.ValueMember = "Value";
column.DataSource= list.ToList();
-----------------更新------------------- > 嗨我已经根据Sanjeevakumar Hiremat改变了我的代码,它运作得很好。
cbStatus.DataSource = Enum.GetValues(typeof(CourseStudentStatus));
但是,当我想要一个Get()并想要将值绑定回cbStatus时,它会抛出错误{“对象引用未设置为对象的实例。”}
cbStatus.SelectedValue = Course.Status;
。
cbStatus.Datasource不为空,绑定到cbStatus.DataSource = Enum.GetValues(typeof(CourseStudentStatus));
后有值
答案 0 :(得分:17)
以下应该是绑定它的最简单方法。
column.DataSource = Enum.GetValues(typeof(CourseStudentStatus));
要获取所选值,您需要将其强制转换为枚举类型。
CourseStudentStatus selectedValue = (CourseStudentStatus)column.SelectedValue
Enum.GetValues返回一个enumType值数组,然后可以绑定到任何控件。
我在独立的组合框中测试了这个,而不是在DataGridView,YMMV的组合框列中测试过。
答案 1 :(得分:4)
我认为没有最好的办法。我曾经做过类似于GenericListItem<T>
类的事情,其中T是支持值,在你的情况下是枚举。
此类公开要绑定的Display
字符串和Value
T属性。我想我也覆盖了ToString
,因为如果你没有指定DisplayMember
,它是默认值。我进一步做了一个构造函数,仅使用Value
并将Display
默认为Value.ToString
,我认为这是枚举工作。
然后我会生成List<GenericListItem<T>>
,将其提供到列的DataSource
,并在代码中相应地设置DisplayMember
和ValueMember
属性。此列表是您示例中使用的字典的替代。
但我并不是说这是一个更好的解决方案:-)但是这意味着你可以删除代码,比如枚举迭代,进入这个类,或者专门处理类以更好地处理某些数据类型,所有这些都是为了插入最终目标进入一个列表并绑定到一个控件。