可空类型的 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 组合框下拉列表中的空值的主要内容,如果未能解决你的问题,请参考以下文章

(C#)datagridview中设置某列为下拉框

Datagridview 在更改列组合框值时执行代码

单击组合框值时 DataGridView 列标题更改

DataGridView 与组合框列显示 System.Data.DataRowView 而不是 DisplayMember

DataGridView嵌入comboBox以及DataGridViewComboBoxColumn数据绑定

Datagridview 组合框为空