【问题标题】:Empty value in datagridview combobox dropdown for nullable type可空类型的 datagridview 组合框下拉列表中的空值
【发布时间】:2014-08-13 17:05:32
【问题描述】:

我有一个可空枚举绑定到组合框单元格。组合框样式设置为下拉。

由于我的枚举可以为空,我希望 Dropdown 有一个空值,但情况似乎并非如此。

除了向枚举添加一个“NULL”值并跟踪它之外,是否有任何内置方式来执行此操作?

【问题讨论】:

    标签: c# winforms datagridview enums datagridviewcombobox


    【解决方案1】:

    据我所知,Windows 窗体binding 没有类似WPF TargetNullValue property 的东西,所以唯一可能的方法是处理FormatParse 事件:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 2017-12-25
      • 1970-01-01
      相关资源
      最近更新 更多