2008-09-22 9 views
12

Ich habe den folgenden Code:Wie binde ich das Ergebnis von DataTable.Select() an ein ListBox-Steuerelement?

ListBox.DataSource = DataSet.Tables("table_name").Select("some_criteria = match") 
ListBox.DisplayMember = "name" 

Die DataTable.Select() method gibt einen Array von System.Data.DataRow Objekten.

Egal, was ich in der ListBox.DisplayMember Eigenschaft angeben, alles, was ich sehe, ist die List-Box mit der richtigen Anzahl von Elementen alle als System.Data.DataRow anstelle des Wertes zeigen Ich möchte die in der "name" Spalte ist!

ist es möglich, auf die DataTable.Select() resultierende Array zu binden, statt durch sie der Looping und Hinzufügen jedes zum ListBox?

(Ich habe kein Problem mit Looping, aber nicht über ein elegantes Ende scheinen!)

Antwort

33

ein DataView stattdessen verwenden.

ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows); 
ListBox.DisplayMember = "name" 
+0

In den meisten Fällen können Sie Standardsteuerelemente nicht direkt an eine DataTable oder eine DataRow binden. Sie müssen eine DataTableView oder eine DataRowView erhalten. Josh hat Recht. – Will

+0

Guter Anruf, danke Josh. –

+1

Tolle Antwort, danke: o) – Andrew

1

Josh hat es richtig mit der Dataview. Wenn Sie einen sehr großen Hammer benötigen, können Sie das Array von Zeilen aus jedem DataTable.Select ("...") nehmen und eine Zusammenführung in ein anderes DataSet durchführen.

 

DataSet copy = new DataSet(); 
copy.Merge(myDataTable.Select("Foo='Bar'")); 
// copy.Tables[0] has a clone 
 

Dieser Ansatz für das, was Sie zu tun versuchen ist wahrscheinlich übertrieben, aber es gibt Fälle, in denen Sie eine Datentabelle aus einer Reihe von Zeilen erhalten müssen, wo sie nützlich ist.