将组合添加到组合框中

时间:2011-03-18 10:28:41

标签: c# linq-to-sql

您好我可能知道如何将下面的枚举值绑定到组合框中吗? 我写了下面的代码,但效果很好,但这是最好的方法。

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));后有值

请告知。

2 个答案:

答案 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,并在代码中相应地设置DisplayMemberValueMember属性。此列表是您示例中使用的字典的替代。

但我并不是说这是一个更好的解决方案:-)但是这意味着你可以删除代码,比如枚举迭代,进入这个类,或者专门处理类以更好地处理某些数据类型,所有这些都是为了插入最终目标进入一个列表并绑定到一个控件。