【问题标题】:How to remove an Item from a combobox when a datasource is assigned to an enum?将数据源分配给枚举时如何从组合框中删除项目?
【发布时间】:2011-09-04 11:34:24
【问题描述】:

当数据源分配给枚举时,如何从组合框中删除项目?

尝试通过Items.Remove 删除时,出现错误:

设置 DataSource 属性时无法修改项目集合。

有什么建议吗?

注意:我会继续使用枚举,因为我在代码中的很多地方都处理它。


代码:

public enum DefaultValueType
{
    None = 0,
    Static = 1,
    Query = 2
}

cBoxDefaultType.DataSource = Enum.GetValues(typeof(DefaultValueType));

在一种情况下,我想从组合框的选项中删除查询项。

cBoxDefaultType.Items.RemoveAt(2); // Throw exception

【问题讨论】:

    标签: c# winforms combobox


    【解决方案1】:

    我通过过滤枚举数组找到了解决方案:

    Enum.GetValues(typeof(DefaultValueType))
        .Cast<DefaultValueType>()
        .Where(p => p != DefaultValueType.Query)
        .ToArray<DefaultValueType>()
    

    【讨论】:

      【解决方案2】:

      您需要从DataSource 中删除项目并重新绑定或仅使用.Items 而不使用DataSource

      在您的情况下,您需要将 Enum 转换为数组,然后使用它。

      【讨论】:

      • 我无法转换它,因为我使用的是值(整数)而不是处理字符串
      • 好的,您可以通过 foreach 循环将值放入 Items 属性,而不是 .Remove 将起作用,否则您可以分配 var array = Enum.GetValues(typeof(DefaultValueType)); 然后从数组中删除必要的值并分配给 @ 987654327@
      • 感谢您的第二个建议,我将其添加为答案。
      【解决方案3】:

      也适用于 .NET 2.0(从枚举“SomeEnum”中删除“无效”项):

      comboBox1.DataSource = Array.FindAll((SomeEnum[])Enum.GetValues(typeof(SomeEnum)),
      (SomeEnum SM) => { return SM != SomeEnum.Invalid; });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-22
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        • 2019-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多