将ComboBox绑定到2数据源:表&枚举

本文关键字:枚举 数据源 ComboBox 绑定 | 更新日期: 2023-09-27 18:11:23

我有下一个Enum:

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)而不是字符串值。

我应该使用哪个数据源?

如何在数据源中组合DB和枚举?

将ComboBox绑定到2数据源:表&枚举

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";

你应该写:

Enum.GetName(typeof(DoneStatus));

这里有两个步骤

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

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

2)设置从DB查询中读取的项。

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

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