Как связать результат DataTable.Select () с элементом управления ListBox? - PullRequest
12 голосов
/ 22 сентября 2008

У меня есть следующий код:

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

Метод DataTable.Select() возвращает массив объектов System.Data.DataRow.

Независимо от того, что я указываю в свойстве ListBox.DisplayMember, все, что я вижу, это ListBox с правильным количеством элементов, отображаемых как System.Data.DataRow вместо значения, которое я хочу, которое находится в столбце "name"!

Возможно ли связать результирующий массив из DataTable.Select(), вместо того, чтобы проходить по нему и добавлять каждый из них к ListBox?

(у меня нет проблем с зацикливанием, но это не выглядит элегантным окончанием!)

Ответы [ 2 ]

33 голосов
/ 22 сентября 2008

Вместо этого используйте DataView .

ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows);
ListBox.DisplayMember = "name"
1 голос
/ 22 сентября 2008

Джош имеет право с DataView. Если вам нужен очень большой молоток, вы можете взять массив строк из любого DataTable.Select ("...") и выполнить слияние с другим DataSet.


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

Такой подход к тому, что вы пытаетесь сделать, скорее всего, излишним, но в некоторых случаях вам может понадобиться получить данные из массива строк, где это полезно.

...