Как построить элемент управления, который определяет значение свойства на основе привязанного источника данных? - PullRequest
1 голос
/ 31 июля 2009

У меня есть база людей и рубашек. У каждого человека есть определенные рубашки, которые он любит носить. Для этого у меня есть три таблицы. Персона, Рубашка и Персона. PersonShirt состоит из списка строк с PersonId и ShirtId. Для пользовательского интерфейса я использую CheckedComboBox. Это поле со списком отмеченных элементов. Для конкретного человека в поле со списком перечислены все рубашки, а предметы отмечены или сняты в зависимости от того, что он любит носить. Если элемент отмечен, в базу данных добавляется новая PersonShirt.

Это просто пример сценария, который несколько раз встречается в рамках одного из проектов нашей компании. Итак, я создал пользовательский CheckedComboBox, который принимает LinksDataSource для «PersonShirt» и LinksValueMember для «ShirtId».

Как я могу получить свойство, основанное на строке LinksValueMember, от определенного элемента в LinksDataSource? LinksDataSource является BindingSource.

1 Ответ

2 голосов
/ 31 июля 2009

Я считаю, что правильный способ сделать это - использовать интерфейс 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);
...