【问题标题】:ComboBox bound to an enum type's values while also having a "blank" entry?ComboBox 绑定到枚举类型的值,同时还具有“空白”条目?
【发布时间】:2010-10-22 20:44:21
【问题描述】:

如果我将 WinForms ComboBox 绑定到枚举类型的值,即

combo1.DropDownStyle = ComboBoxStyle.DropDownList;
combo1.DataSource = Enum.GetValues(typeof(myEnumType));

谁知道我怎样才能达到相同的结果,而除了与每个枚举值匹配的条目外,我还可以有一个空白条目表示没有选择?

我不能简单地为枚举类型添加一个特殊值,因为这必须灵活地处理任何枚举类型。

感谢您的帮助。

编辑:我应该明确我想绑定实际的枚举值而不是它们的名称。如果绑定了实际的枚举值,则 ComboBox 负责调用它们的 ToString() 以获取要显示的文本。

【问题讨论】:

  • 伙计们,这是 WinForms,而不是 ASP.NET。设置 DataSource 后,您无法将项目添加到 WinForms 中的 ComboBox。

标签: c# .net winforms combobox enums


【解决方案1】:

不确定你们是否已经尝试过所有已发布的代码,但您无法将项目添加到数据绑定的 ComboBox 中。这是winforms,不是WPF,所以没有“DataBind”功能。

你可以这样做:

public static string[] GetEnumValues<T>(bool includeBlank) 
{
    List<string> values = new List<string>((Enum.GetValues(typeof(T)) as T[]).Select(t => t.ToString()));

    if (includeBlank)
    {
        values.Insert(0, string.Empty);
    }

    return values.ToArray();
}

然后

combo.DataSource = GetEnumValues<myEnumType>(true);

【讨论】:

  • 现在如果我想在特定条件下选择空值我应该怎么做?因为 Enum 中不存在 DBNull,所以我应该选择哪个值?
【解决方案2】:

你可以试试这样的:

已编辑以反映 Brad_Z 的出色建议

static IEnumerable<String> getValues<T>(String initialValue)
{
    yield return initialValue;

    foreach (T t in Enum.GetValues(typeof(T)))
        yield return t.ToString();
}

static IEnumerable<String> getValues<T>()
{
    return getValues<T>(String.Empty);
}

这将允许您像这样绑定到此函数的结果:

combo1.DataSource = getValues<myEnumType>().ToArray();

或者像这样,如果您希望为初始项目指定不同的值:

combo1.DataSource = getValues<myEnumType>("Select").ToArray();

【讨论】:

  • 好答案。我将向 getValues 函数添加一个参数,以允许指定空白条目的文本。所以你可以说: getValues("select a cat").ToArray();
  • 感谢您的帖子 - 这会很有效,除了它是我想要的实际枚举值而不是它们名称的字符串表示形式 :-)
【解决方案3】:

(请参阅我对我澄清不想绑定到字符串集合的问题的编辑)。

经过更多的摆弄,下面的怪物似乎起作用了。 combo1.SelectedItem 是对象类型,可以是 DBNull 或(装箱?)枚举值。此代码是否可取?

combo1.DataSource = (new object[] { DBNull.Value }
                        .Concat(Enum.GetValues(refToAnEnumType)
                            .Cast<object>())).ToList()

编辑:我看到 Adam 和 Andrew 的方法很容易适应做同样的事情。谢谢大家!

【讨论】:

  • 现在如果我想选择空值我应该怎么做?因为 Enum 中不存在 DBNull,所以我应该选择哪个值?
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 2010-11-16
相关资源
最近更新 更多