2009-08-05 23 views
1

我在窗体中有一个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是一个项目中的组合框的任何一个选择objects.Every时间的主列表的一个子集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个不同属性的对象的单个列表。并且控件更新索引更改。

回答

0

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

1

如果您的第二个组合框的列表类型是DropDown而不是DropDownList,那么您可能会遇到此问题,该错误通常与您提及的异常中的错误相同。请检查您的控件。

对于第二个想法,如果你的组合框都彼此相关,具体如下:

一对多的关系

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

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

多对多关系

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

- >如果问题改变它触发了自己的标记,如果标签只会改变它触发的问题只有哪个标签。

仅用于此目的,每当组合框项目更改时应搜索整个集合。因为根据我的理解,您的问题会触发另一个选择。

+0

是mine是下拉样式,它不会导致问题,因为所选值将被检查为空值。 是的,我的是多对多的关系,因此我分组并搜索列表。 我担心列表会每次改变都会改变,这是否会导致问题。 – lune 2009-08-05 12:30:39

1

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

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

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

+0

是的,这是可以做到的,但值可以编辑,因此需要与其他列表同步。 如果没有更好的解决方案,这将是解决方案。 我不确定这可以用字典来完成。 – lune 2009-08-05 12:36:02