У меня такой код:
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
Такой подход к тому, что вы пытаетесь сделать, скорее всего, является излишним, но бывают случаи, когда вам может потребоваться получить данные из массива строк, где это полезно.
В большинстве случаев вы не можете привязать стандартные элементы управления напрямую к DataTable или DataRow. Вам нужно получить DataTableView или DataRowView. Джош прав.