C# 具有对象列表的多个组合框

C# 具有对象列表的多个组合框,c#,.net,list,combobox,C#,.net,List,Combobox,我有一个表单中的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"; 其中ListContain

我有一个表单中的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异常

这是因为列表正在被重写还是什么原因,我能猜出来

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

谢谢你的帮助

编辑: 我已经放弃调试这个。
但是有谁能建议一种方法,用一个具有3种不同属性的对象列表绑定3个组合框呢。如果第二个组合框的列表类型是DropDown而不是DropDownList,则此问题可能会出现,通常与您提到的返回异常中的错误相同。请检查您的控件

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

一对多关系

  • 组合框:CompanyGroup
  • 组合框:公司
  • 组合框:人
-->如果从上面更改,则触发下面。 您的案例如下:

多对多关系

  • 组合框:标签
  • 组合框:问题
-->如果问题发生变化,它会触发自己的标记;如果标记发生变化,它只会触发问题的哪个标记


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

为什么不使用存储组合框值的其他列表

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


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

嗯,我得到了答案。
您可以使用对象子集绑定控件,这不是问题的原因。

并且我能够以描述的方式处理多个组合框。

是的,我的是下拉式风格,它不会导致问题,因为选中的值被检查为空值。是的,我的是多对多关系,因此我分组并搜索列表。我担心每次选择时列表都会更改,这是否会导致问题。是的,可以这样做,但是可以编辑值,因此需要与其他列表同步。如果没有更好的解决办法,这就是解决办法。我不确定用字典能做到这一点。我同意。这就是为什么我说了额外的代码行。无论如何,我也遇到了类似的问题,这就是我的解决方案。虽然效率较低,但拥有字符串列表也为我提供了一些额外的功能。另外,就个人而言,我更喜欢多行较小的代码,而不是写得很漂亮但很长的一行代码。