Ответ 1
Вместо этого используйте DataView.
ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows);
ListBox.DisplayMember = "name"
У меня есть следующий код:
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
?
(У меня нет проблем с циклом, но это не выглядит элегантным окончанием!)
Вместо этого используйте DataView.
ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows);
ListBox.DisplayMember = "name"
У Джоша все правильно с DataView. Если вам нужен очень большой молот, вы можете взять массив строк из любого DataTable.Select( "..." ) и выполнить слияние в другой DataSet.
DataSet copy = new DataSet();
copy.Merge(myDataTable.Select("Foo='Bar'"));
// copy.Tables[0] has a clone
Этот подход для того, что вы пытаетесь сделать, скорее всего, переполнен, но есть случаи, когда вам может понадобиться получить данные из массива строк, где это полезно.