【发布时间】:2013-12-03 18:54:36
【问题描述】:
我的 .NET 4.5 WinForms 应用程序中有一个包含两列的 DataGridView。一列是常规文本框列,另一列是DataGridViewComboBoxColumn,它是一个下拉列表。我正在尝试将列绑定到我的Filter 对象的BindingList,并且我希望枚举FilterType 中的所有内容都显示在下拉列表中。这是我的对象和枚举的代码:
public class Filter
{
public string keyword { get; set; }
public FilterType type { get; set; }
}
public enum FilterType : int //the strings should appear in the dropdown
{
SESSION = 1,
ORDER = 2,
SHIPMENT = 3
}
我在 VS 2012 设计器中手动创建了列,我将 ColumnType、HeaderText 和 DataPropertyName 更改为 keyword 和 type。
使用我找到的答案here 我已将这两行代码添加到我的表单加载事件中:
colFilterType.DataSource = Enum.GetValues(typeof(FilterType));
colFilterType.ValueType = typeof(FilterType);
当我运行代码时,我最初会看到一个空白行。每当我单击该行时,无论单击哪一列,都会弹出错误消息。
System.ArgumentException:DataGridViewComboBoxCell 值无效。 ...请处理 DataError 事件。
我可以忽略它并在Keyword 列中输入我想要的任何文本,下拉列表会神奇地填充枚举的第一个值。但是,如果我什至将鼠标悬停在下拉菜单上,则会再次弹出错误(请参阅屏幕截图)。我不确定是什么导致了错误,也不知道在哪里设置断点。我也不知道我是否通过在设计器中制作 DataGridView 的一部分并在代码中修改它们来制造问题。设计师不允许我像在代码中那样设置DataSource。它还包含一个我没有在代码中使用过的字段ValueMember。
虽然不理想,但我不介意捕捉错误并且不采取任何措施,因为下拉菜单似乎会自行填充(并假设所有数据都保持不变)。
【问题讨论】:
标签: c# visual-studio-2012 datagridview enums .net-4.5