¿Cómo vinculo el resultado de DataTable.Select() a un control ListBox?
-
02-07-2019 - |
Pregunta
Tengo el siguiente código:
ListBox.DataSource = DataSet.Tables("table_name").Select("some_criteria = match")
ListBox.DisplayMember = "name"
El DataTable.Select()
método devuelve una matriz de System.Data.DataRow
objetos.
No importa lo que especifique en el ListBox.DisplayMember
propiedad, todo lo que veo es el ListBox con el número correcto de elementos, todos mostrados como System.Data.DataRow
en lugar del valor que quiero que está en el "name"
¡columna!
¿Es posible unirse a la matriz resultante desde DataTable.Select()
, en lugar de recorrerlo y agregar cada uno al ListBox
?
(¡No tengo ningún problema con los bucles, pero no parece un final elegante!)
Solución
Usar una Vista de datos en cambio.
ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows);
ListBox.DisplayMember = "name"
Otros consejos
Josh lo tiene claro con DataView.Si necesita un martillo muy grande, puede tomar la matriz de filas de cualquier DataTable.Select("...") y fusionarla en un DataSet diferente.
DataSet copy = new DataSet();
copy.Merge(myDataTable.Select("Foo='Bar'"));
// copy.Tables[0] has a clone
Ese enfoque para lo que estás tratando de hacer probablemente sea excesivo, pero hay casos en los que es posible que necesites obtener una tabla de datos de una serie de filas donde sea útil.