将ComboBox绑定到2个DataSource:Table&枚举

时间:2013-04-29 09:29:59

标签: c# combobox datasource

我有下一个枚举:

public enum DoneStatus
{
    empty=0,
    succeed,
    failed
};

和表 StatusTbl ,其中 MyStatus 列包含0/1/2。

如何在DataGridViewComboBoxColumn中显示此信息?

我试着写下一个:

ComboColumn.DataSource = Enum.GetValues(typeof(DoneStatus));
ComboColumn.DataPropertyName = "DoneStatus";
ComboColumn.Name = "DoneStatus";

但是我只能看到组合中的所有选项,我根据表中的值看不到正确的选择值。

我还尝试将组合连接到一个绑定源:

ComboColumn.DataSource = statusTblBindingSource;
ComboColumn.DataPropertyName = "MyStatus";

但是我只看到了int值(0/1/2)而不是字符串值。

我应该使用哪种DataSource?

如何在数据源中的DB和枚举之间进行组合?

3 个答案:

答案 0 :(得分:0)

你应该写:

Enum.GetName(typeof(DoneStatus));

答案 1 :(得分:0)

这里有两个步骤

1)将枚举绑定到组合框数据源,这样它就可以有要选择的项目列表。

ComboColumn.DataSource = Enum.GetName(typeof(DoneStatus));

2)根据您从数据库查询中读取的内容设置所选项目。

ComboColumn.DataPropertyName = statusTblBindingSource["MyStatus"]; // See Note.

注意:我不记得从给定列的表中获取值的确切语法,但我认为它类似于我写的行。

答案 2 :(得分:0)

ComboColumn.DataSource = Enum.GetValues(typeof(DoneStatus))
    .Cast<DoneStatus>()
    .Select(p => new { Key = (int)p, Value = p.ToString() })
    .ToList();
// you can change the display member and value member
// based on which value you have stored in database
ComboColumn.DisplayMember = "Key";
ComboColumn.ValueMember = "Value";
ComboColumn.DataPropertyName = "MyStatus";