【问题标题】:How can I remove a value from a combox after setting its datasource?设置数据源后如何从组合框中删除值?
【发布时间】:2012-07-24 09:05:08
【问题描述】:

使用此代码:

comboBoxCurrently.DataSource = PlatypusData.getCurrentlyVals();
comboBoxCurrently.Items.Remove("Surrounded by purplish-blue Penguins");

...我明白了,“System.ArgumentException 未处理 Message=Items 集合在设置 DataSource 属性时无法修改。"

我不想限制稍后从查询中删除的值 (...WHERE bla 'Surrounded...),因为有时该值 IS 允许(显示历史数据),我真的不想在 getCurrentlyVals() 中有一个条件语句使用一个查询语句或另一个(如果有更好的方法)。

有什么想法吗?

更新

好的,这成功了:

List<string> intermediateList = PlatypusData.getCurrentlyVals();
intermediateList.Remove("Surrounded by purplish-blue Penguins");
comboBoxCurrently.DataSource = intermediateList;

再次更新

我把它改成了 Lars 的方式:

comboBoxCurrently.Items.AddRange(PlatypusData.getCurrentlyVals().ToArray());
comboBoxCurrently.Items.Remove("Surrounded by purplish-blue Penguins");

...而且我认为这个页面包含的字符串“被紫蓝色企鹅包围”的实例比人类历史上任何一个页面都多,无论是过去还是未来。

【问题讨论】:

  • 您的第一种方式对于您想要做的事情是完全可以接受的,我几乎更喜欢我发布的AddRange 解决方案。
  • 好的,实际上我刚刚从 ReSharper 的 AddRange 行得到了这个:“从字符串 [] 到对象的协变数组转换可能导致写入操作时出现运行时异常”
  • 这就是我更喜欢List&lt;string&gt; 版本的原因。例如,如果 getCurrentlyVals 返回 KeyValuePair 对象的列表,则 AddRange 将在 ToArray 部分上无效。但是对于字符串来说,它工作正常。

标签: c# .net winforms combobox datasource


【解决方案1】:

将 comboBoxCurrently.DataSource 绑定到公共属性

例如

Public ObservableCollection<string> AnimalList { get; set; }

在Ctor AnimalList = PlatypusData.getCurrentlyVals();

然后AnimalList.Remove("被紫蓝色企鹅包围");

【讨论】:

    【解决方案2】:

    您必须从 DataSource 修改集合,但您似乎反对这样做,因此在这种情况下,不要使用 DataSource,而是尝试将项目直接添加到 ComboBox:

    comboBoxCurrently.Items.AddRange(PlatypusData.getCurrentlyVals().ToArray());
    comboBoxCurrently.Items.Remove("Surrounded by purplish-blue Penguins");
    

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 2012-12-06
      相关资源
      最近更新 更多