C# · 12月 23, 2021

c# – 如何将ComboBox绑定到具有深DisplayMember和ValueMember属性的通用List?

我试图将列表父项之类的通用列表绑定到Combo@R_803_2419@. public Form1() { InitializeComponent(); List<Parent> parents = new List<Parent>(); Parent p = new Parent(); p.child = new Child(); p.child.DisplayMember=”SHOW THIS”; p.child.ValueMember = 666; parents.Add(p); combo@R_803_2419@1.DisplayMember = “child.DisplayMember”; combo@R_803_2419@1.ValueMember = “child.ValueMember”; combo@R_803_2419@1.DataSource = parents; }}public class Parent{ public Child child { get; set; }}public class Child{ public string DisplayMember { get; set; } public int ValueMember { get; set; }}

当我运行我的测试应用程序时,我只看到:“ComboBindingToListTest.Parent”显示在我的Combo@R_803_2419@中,而不是“显示它”.
如何通过一个级别或更深层的属性将Combo@R_803_2419@绑定到通用列表,例如child.DisplayMember?

提前致谢,
阿道夫

解决方法 我认为你不能做你想做的事.上面的设计表明,父母只能有一个孩子.真的吗?或者你为了这个问题的目的简化了设计.

无论父级是否可以拥有多个子级,我建议您使用匿名类型作为组合框的数据源,并使用linq填充该类型.这是一个例子:

private void Form1_Load(object sender,EventArgs e){ List<Parent> parents = new List<Parent>(); Parent p = new Parent(); p.child = new Child(); p.child.DisplayMember = “SHOW THIS”; p.child.ValueMember = 666; parents.Add(p); var children = (from parent in parents select new { DisplayMember = parent.child.DisplayMember,ValueMember = parent.child.ValueMember }).ToList(); combo@R_803_2419@1.DisplayMember = “DisplayMember”; combo@R_803_2419@1.ValueMember = “ValueMember”; combo@R_803_2419@1.DataSource = children; }