Die DisplayMember
und ValueMember
sind nur anwendbar, wenn Sie Daten verwenden Bindung (ListBox.DataSource
). Sie arbeiten entweder mit realen Eigenschaften, die durch Reflektion abgerufen werden können, oder über das .NET-Komponentenmodell und die Schnittstelle ICustomTypeDescriptor
.
Wenn Sie eine DataTable
direkt binden, die GetEnumerator
Methode und die IList
Implementierung kehrt immer DataRowView
Instanzen statt DataRow
s. DataRowView
implementiert die ICustomTypeDescriptor
, wo die DisplayName
einen Spaltennamen beziehen kann.
Wenn Sie also eine benutzerdefinierte gefilterte Liste hinzufügen möchten, empfehle ich Ihnen, eine aus beliebiger Quelle zu erstellen. Zum Beispiel:
listBox1.DisplayMember = "Name";
listBox1.ValueMember = "Value";
var list = Enumerable.Range(1, 10).Select(i => new {Name = i.ToString(), Value = i}).ToList();
listBox1.DataSource = list;
Wenn Name
Eigenschaft vorhanden ist, werden Sie seinen Wert sehen; Andernfalls sehen Sie die ToString
der Elemente.
Wenn Sie jedoch die Elemente programmgesteuert hinzufügen (ListBox.Items
), werden diese Eigenschaften ignoriert und immer die ToString
der Elemente verwendet.
Können Sie Code-Snippet freigeben? – Munawar
Nicht viel Code ist sehr einfach. Ich habe meine Frage bearbeitet –