可空类型的 datagridview 组合框下拉列表中的空值
Posted
技术标签:
【中文标题】可空类型的 datagridview 组合框下拉列表中的空值【英文标题】:Empty value in datagridview combobox dropdown for nullable type 【发布时间】:2014-08-13 17:05:32 【问题描述】:我有一个可空枚举绑定到组合框单元格。组合框样式设置为下拉。
由于我的枚举可以为空,我希望 Dropdown 有一个空值,但情况似乎并非如此。
除了向枚举添加一个“NULL”值并跟踪它之外,是否有任何内置方式来执行此操作?
【问题讨论】:
【参考方案1】:据我所知,Windows 窗体binding 没有类似WPF TargetNullValue property 的东西,所以唯一可能的方法是处理Format 和Parse 事件:
Binding binding = new Binding // ..
comboBox.DataBindings.Add(binding);
binding.Format += (sender, eventArgs) =>
if (eventArgs.Value == null)
eventArgs.Value = "NULL";
else
eventArgs.Value = eventArgs.Value.ToString();
binding.Parse += (sender, eventArgs) =>
if (eventArgs.Value == "NULL")
eventArgs.Value = null;
else
eventArgs.Value = Enum.Parse(typeof(MyEnum), eventArgs.Value.ToString());
【讨论】:
我最终为 CellValueChanged 添加了一个事件,并为设置了 NULL 枚举值的各个列设置了 null。这是我的场景最简单的方法。感谢您为我指明正确的方向。 对不起,我只是看了一眼,不是ComboBox,而是DataGridViewComboBoxColumn。 别担心!您的回答足以为我指明正确的方向。此外,如果每个答案都是完美的,我们怎么能做到完美呢? ;) 没有人是完美的 :) - 这是真的。此外,您可以添加自己的实际解决问题的答案并将其标记为已接受 - 对于 SO 的未来用户而言,这将比仅指向正确方向的答案更有用。 没关系,我想程序员应该能从你的回答和我的评论中找出答案。【参考方案2】:在数据源中使用 DBNull.Value:
var col = new DataGridViewComboBoxColumn();
col.DataSource = new Object[] DBNull.Value, MyEnum.Value1, MyEnum.Value2 ;
【讨论】:
以上是关于可空类型的 datagridview 组合框下拉列表中的空值的主要内容,如果未能解决你的问题,请参考以下文章
DataGridView 与组合框列显示 System.Data.DataRowView 而不是 DisplayMember