【问题标题】:Multiple Comboboxes with a list of objects带有对象列表的多个组合框
【发布时间】:2009-08-05 11:11:42
【问题描述】:

我在一个表单中有 3 个组合框,一个对象列表。我需要将组合框与列表中的 3 个不同的类成员绑定。 (C# 3.0、.NET 3.5) 我目前正在这样做

Title_Combo.DataSource = ListContaining.GroupBy(item => item.Title).Where(item => !item.Key.Equals(string.Empty)).ToList();

Title_Combo.DisplayMember = "Key";

其中 ListContaining 是对象主列表的子集。每次在这些组合框中的任何一个中选择项目时,ListContaining 都会根据对象主列表中的选定值填充,并且所有组合框都会重新加载。

ListContaining = ListFiles.Where(item => item.GetType().GetProperty(name).GetValue(item, null).Equals(int.Parse(Sender.SelectedItem.ToString()))).ToList();

它可以完美加载,但组合框的下一个选择会引发 NullReference 异常。

这是因为List ListContaining被重写还是什么原因,我可以弄清楚。

还有更好的方法来处理列表中的 3 个组合框。

感谢您的帮助。

编辑: 我已经放弃调试了。 但是任何人都可以建议一种将 3 个组合框与具有 3 个不同属性的对象列表绑定的方法。并且控件会根据索引更改进行更新。

【问题讨论】:

    标签: c# .net list combobox


    【解决方案1】:

    如果您的第二个组合框的列表类型是 DropDown 而不是 DropDownList,则可能会出现此问题,通常在您提到的异常中返回相同的错误。请检查您的控件。

    再想一想,如果您的组合框相互关联,如下所示:

    一对多关系

    • 组合框:公司组
    • 组合框:公司
    • 组合框:人

    -->如果一个从上面改变,下面被触发。 你的情况是这样的:

    多对多关系

    • 组合框:标签
    • 组合框:问题

    --> 如果问题发生变化,它会触发它自己的标签,如果标签发生变化,它只会触发问题所具有的标签。

    仅出于此目的,每次组合框项目更改时,您都应该在整个集合中搜索。因为我从您的问题中了解到,一个选择会触发另一个选择。

    【讨论】:

    • 是的,我的是下拉样式,它不会导致问题,因为会检查所选值是否为空值。是的,我的是多对多关系,因此我对列表进行分组和搜索。我担心每次选择时列表都会更改,这是否会导致问题。
    【解决方案2】:

    为什么不使用存储组合框值的附加列表?

    因此,对于每个组合框,您都有一个字符串列表。您还可以将所有这些不同的字符串列表存储在另一个结构中,例如字典。

    也许这会导致更多的代码行和额外的内存使用,但作为回报,您将获得更易于管理的代码。

    【讨论】:

    • 是的,可以这样做,但是可以编辑值,因此需要与其他列表同步。如果没有更好的解决方案,这将是解决方案。我不确定这可以用字典来完成。
    • 同意。这就是为什么我说额外的代码行。无论如何,我遇到了类似的问题,这是我的解决方案。虽然效率较低,但拥有字符串列表也为我提供了一些额外的功能。另外,我个人更喜欢多行较小的代码,而不是写得很巧妙但很长的 1 行代码。
    【解决方案3】:

    好吧,我得到了答案。
    您可以使用对象的子集来绑定控件,这不是问题的原因。
    而且我能够以所描述的方式处理多个组合框。

    【讨论】:

      猜你喜欢
      • 2016-12-29
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 2010-10-03
      • 1970-01-01
      相关资源
      最近更新 更多