1

我的应用程序包含一个可以在图像顶部绘制框的 winform。这些框具有坐标、类型(主类的所有派生类FormBox)和可能的group参数(在生成的用于导出的 XML 中)。

此组参数由用户从 ComboBox 中选择。最初,ComboBox 是空的,用户可以GroupName在一种类型的框上设置 a,该框将为相同类型的其他框填充 ComboBox 列表,从而允许将它们组合在一起或不组合在一起。

我现在需要为多种框类型组合分组,并且一直在努力寻找填充此 ComboBox 的方法。

对于一种盒子类型,没有真正的问题:

cboUserField_GroupName.DataSource = (from aBox in someFormData.Boxes
where (aBox is UserContentFormBox) select (aBox as UserContentFormBox)).GroupBy(x => x.GroupName).Select(x => x.First()).ToList();

cboUserField_GroupName.ValueMember = "GroupName";

但由于我有两个单独的列表,每个列表都填充了来自 的子类的对象集合FormBox,我想将 ComboBox 控件绑定到一个连接列表,无论是GroupName字符串还是对象并不重要。这并没有做太多,主要是因为我无法从一个简单的 中弄清楚 value 成员是什么List<string>,另外因为列表最终还是被空对象填充:

List<string> groupNames = (from aBox in someFormData.Boxes where (aBox is UserContentFormBox || aBox is VATReturnFormBox) select aBox.GroupName).Distinct().ToList();

cboUserField_GroupName.DataSource = groupNames.ToList();

所以,简而言之,我如何将 ComboBox 控件绑定到一个列表,用从基类派生的对象填充(通过 lambda)?绑定应该在GroupName属性上。

我应该将每个列表带回一个List<FormBox>可以轻松加入的列表吗?还有其他更好的方法吗?

4

1 回答 1

0

好的,找到了。首先,创建两个List<string>对象GroupName属性:

List<string> firstList = (from aBox in someFormData.Boxes
where (aBox is UserContentFormBox)
select (aBox as UserContentFormBox).GroupName).Distinct().ToList();

List<string> secondList = (from aBox in someFormData.Boxes
where (aBox is VATReturnFormBox)
select (aBox as VATReturnFormBox).GroupName).Distinct().ToList();

然后,加入这些列表,删除空值和重复项,排序并填充一个新列表:

List<string> groupNames = firstList.Union(secondList).Where(x => x != null).Distinct().OrderBy(x => x).ToList();

最后,用值填充必要的组合框:

cboUserField_GroupName.Items.AddRange(groupNames.ToArray());
cboVATReturn_GroupName.Items.AddRange(groupNames.ToArray());

不管怎么说,还是要谢谢你。

于 2012-12-20T09:12:19.237 回答