如何构建基于绑定的DataSource确定属性值的控件?

时间:2009-07-30 22:23:26

标签: .net data-binding controls

我有一个人和衬衫的数据库。每个人都有他喜欢穿的特定衬衫。 为此,我有三张桌子。人,衬衫和PersonShirt。 PersonShirt由一个包含PersonId和ShirtId的行列表组成。 对于UI,我使用的是CheckedComboBox。这是一个包含已检查项目的组合框。对于特定的人,组合框列出所有衬衫,并且根据他喜欢的穿戴来检查或取消检查项目。如果选中某个项目,则会将新的PersonShirt添加到数据库中。

这只是在我们公司的一个项目中多次出现的情景的一个例子。所以,我创建了一个自定义的CheckedComboBox,它接受了“PersonShirt”的LinksDataSource和“ShirtId”的LinksValueMember。

如何从LinksDataSource中的特定项目获取基于LinksValueMember字符串的属性? LinksDataSource是一个BindingSource。

1 个答案:

答案 0 :(得分:2)

我认为正确的方法是使用ITypedList接口。如果绑定列表实现ITypedList,则调用ITypedList.GetItemProperties(null)以获取属性,并找到您想要其值的属性。然后使用生成的PropertyDescriptor获取值:

ITypedList typedList = this.dataSource as ITypedList;
PropertyDescriptor valueDescriptor = typedList.GetItemProperties(null)).FirstOrDefault(d => d.Name == this.linksValueMember);
object value = valueDescriptor.GetValue(listObject);