2008-09-22 4 views
12

У меня есть следующий код:Как связать результат DataTable.Select() с элементом управления ListBox?

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

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

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

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

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

ответ

33

Используйте DataView вместо этого.

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

В большинстве случаев вы не можете привязывать стандартные элементы управления непосредственно к DataTable или DataRow. Вы должны получить DataTableView или DataRowView. Джош прав. – Will 2008-09-22 13:33:54

1

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

 

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

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

Смежные вопросы