2008-09-22 8 views
12

I tienen el siguiente código:¿Cómo vinculo el resultado de DataTable.Select() a un control ListBox?

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

Los DataTable.Select() method devuelve una matriz de System.Data.DataRow objetos.

No importa lo que especifica en la propiedad ListBox.DisplayMember, todo lo que veo es la lista con el número correcto de todos los artículos que muestran como System.Data.DataRow en lugar del valor que quiero que se encuentra en la columna de la "name"!

¿Es posible enlazar a la matriz resultante de DataTable.Select(), en lugar de recorrerlo y agregar cada una al ListBox?

(tengo ningún problema con bucles, pero no parece un elegante final!)

Respuesta

33

Utilice un DataView lugar.

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

En la mayoría de los casos, no puede vincular los controles estándar directamente a un DataTable o un DataRow. Tienes que obtener un DataTableView o un DataRowView. Josh es correcto. – Will

+0

Buena llamada, gracias Josh. –

+1

Excelente respuesta, gracias: o) – Andrew

1

Josh tiene razón con el DataView. Si necesita un martillo muy grande, puede tomar la matriz de filas de cualquier DataTable. Seleccione ("...") y realice una fusión 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 estamos tratando de hacer es muy probablemente una exageración, pero hay casos en los que sea necesario para obtener una tabla de datos de un conjunto de filas en las que es útil.

Cuestiones relacionadas