2009-07-30 4 views
1

Ich habe eine Datenbank von Menschen und Hemden. Jede Person hat bestimmte Hemden, die er gerne trägt. Dafür habe ich drei Tabellen. Person, Shirt und Personenshirt. PersonShirt besteht aus einer Liste von Zeilen mit einer PersonId und einer ShirtId. Für die Benutzeroberfläche verwende ich eine CheckedComboBox. Dies ist ein Kombinationsfeld mit überprüften Elementen. Für eine bestimmte Person listet das Kombinationsfeld alle Hemden auf und die Artikel werden abhängig davon, was er gerne trägt, geprüft oder deaktiviert. Wenn ein Element markiert ist, wird ein neues PersonShirt zur Datenbank hinzugefügt.Wie erstelle ich ein Steuerelement, das den Eigenschaftswert basierend auf der gebundenen DataSource bestimmt?

Dies ist nur ein Beispiel für ein Szenario, das mehrmals in einem unserer Projekte auftaucht. Also habe ich eine benutzerdefinierte CheckedComboBox erstellt, die eine LinksDataSource für das "PersonShirt" und ein LinksValueMember für die "ShirtId" aufnimmt.

Wie kann ich eine Eigenschaft basierend auf der LinksValueMember-Zeichenfolge von einem bestimmten Element in der LinksDataSource abrufen? LinksDataSource ist eine BindingSource.

+0

Das klingt wie Hausaufgaben. –

Antwort

2

Ich glaube, dass der richtige Weg, dies zu tun ist, verwenden Sie die ITypedList-Schnittstelle. Wenn die gebundene Liste ITypedList implementiert, rufen Sie ITypedList.GetItemProperties (null) auf, um die Eigenschaften abzurufen, und suchen Sie nach der Eigenschaft, für die Sie den Wert haben möchten. Verwenden Sie dann den resultierenden PropertyDescriptor, um den Wert zu erhalten:

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