c# 组合框绑定(bind)和第一个空值

标签 c# combobox null

我可能遇到了一个小问题,但找不到解决方法...

我在 winform 上有一个组合框,这个组合框绑定(bind)到数据表中的列。 此列(保留打印机名称)允许为空值。我希望组合框显示第一个值字符串“default”,然后显示打印机列表。但我不想将“默认”字符串存储在数据表中,只是空值。

cmbDefaultPrinter.DataSource = this.availablePrinters;
cmbDefaultPrinter.DisplayMember = "Display";
cmbDefaultPrinter.ValueMember = "Value";

cmbDefaultPrinter.DataBindings.Add(new Binding("Text", ctr.ds.Tables[t.toTable], "printer"));

其中 availablePrinters 是此类的列表:

class myPrinters
{
    public string Value { get; set; }
    public string Display { get; set; }

    public myPrinters(string value, string display)
    {
        this.Value = value;
        this.Display = display;
    }
}

availablePrinters 中的第一个元素是:myPrinter(null, "Default printer");

我做错了什么?

最佳答案

一些选项:

给定 myPrinter 对象的集合,如 List 或绑定(bind)的 DataTable,您可以简单地将默认值插入集合的第一个元素。然后,当您使用 DataBind 时,所有当前元素都将被丢弃,并重新加载新元素,空白元素位于顶部。

您还可以通过覆盖 OnDataBound 来自定义数据绑定(bind)。 DataTable的元素全部添加完后,进去手动插入默认值。

您也可以放弃默认的 DataBind 行为,自己填充 ComboBox。在“延迟加载”组合框的情况下,我已经这样做了很多次(我首先设置一个项目作为记录的当前值,然后当他们想要下拉列表时,我去检索值并完全填充列表)。它涉及更多;您基本上需要使用 Items.Add() 来滚动您自己的数据绑定(bind)行为。但是,这并没有那么困难,而且它为您提供了更大的灵 active ,包括添加不在 DataSource 中的项目的能力。

编辑: 在那种情况下(当你想要 NULL 时写入空字符串),我会将以下内容放入扩展方法库中,然后在 comboBox 的末尾调用它.SelectedValue() 当您检索它以粘贴到您的域对象中时:

public static string NullIfEmpty(this string input)
{
    return String.IsNullOrEmpty(input) ? null : input;
}

基本上,Web 控件在设置文本、值或其他显示的数据属性时将 null 转换为空字符串,因此它们可以简化其内部工作。但是,它们不会转换回 null,因此如果您想要 null 而不是空字符串,则必须自己进行转换。正如上面的方法所示,它非常简单。

关于c# 组合框绑定(bind)和第一个空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4934858/

相关文章:

带有对象的 Javafx 可编辑组合框

c# - WPF ComboBox 到 ObservableCollection 的绑定(bind)

c# - GC.Collect() 没有立即收集?

c# - span 标签 onclick 调用代码隐藏方法

c# - 检查是否选择了 ComboBox 值

ios - 在 Swift 中转换 "as? Int"对于不同的数字会产生不同的结果

c# - 带有空检查的 If 语句

linux - 在选择值时显示额外列的 Vala 组合框

java - 从 HashSet 中删除空引用

java - 如何对由 "null"和字符串组合的数组进行排序?