gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 14:22:27 25 4
gpt4 key购买 nike

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

我在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com