繁体   English   中英

C#组合框绑定和第一个空值

[英]c# combobox binding and first null value

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

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

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,“默认打印机”);

我究竟做错了什么?

一些选项:

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

您还可以通过覆盖OnDataBound来自定义数据绑定。 添加所有DataTable的元素后,进入并手动插入默认值。

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

编辑:在这种情况下(当您需要NULL时将写入一个空字符串),我将把以下内容放入扩展方法库,然后在检索它时在comboBox.SelectedValue()的末尾对其进行调用坚持您的域对象:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM