多个组合框与对象列表

时间:2009-08-05 11:11:42

标签: 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";

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

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

它加载完美,但下一个组合框选择会抛出NullReference异常。

这是因为列表ListContaining正在被重写或其他什么,我可以理解。

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

感谢您的帮助。

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

3 个答案:

答案 0 :(得分:1)

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

再想一想,如果你的组合框彼此相关,如下:

一对多关系

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

- >如果从上面改变,则会触发以下内容。 你的情况就像:

多对多关系

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:0)

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