繁体   English   中英

作为ComboBox DataSource的不同派生对象的列表

[英]List of different derived objects as ComboBox DataSource

我的应用程序由一个winform组成,其中可以在图像上方绘制框。 这些框具有坐标,类型(从主FormBox类派生的所有派生类)和可能的group参数(在生成的XML中用于导出)。

用户从ComboBox中选择此组参数。 最初,ComboBox是空的,用户可以在一种类型的盒子上设置GroupName ,这将为相同类型的其他盒子填充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字符串还是对象都不是很重要。 这没什么用,主要是因为我无法从简单的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> ,该List<FormBox>可以很容易地加入? 还有其他更好的方法吗?

确定找到了。 首先,使对象的GroupName属性具有两个List<string>

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();

然后,加入这些列表,删除null和重复项,对新列表进行排序和填充:

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

最后,用值填充必要的ComboBoxes:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM