Domanda

Ho il seguente codice:

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

La DataTable .Select () method restituisce una matrice di System.Data.DataRow oggetti.

Indipendentemente da ciò che specifico nella proprietà ListBox.DisplayMember , tutto ciò che vedo è ListBox con il numero corretto di elementi che mostrano tutti come System.Data.DataRow del valore che desidero che si trova nella colonna " name " !

È possibile eseguire il binding all'array risultante da DataTable.Select () , invece di eseguire il ciclo attraverso di esso e aggiungerli tutti al ListBox ?

(Non ho problemi con il looping, ma non sembra un finale elegante!)

È stato utile?

Soluzione

Utilizza invece un DataView .

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

Altri suggerimenti

Josh ha ragione con DataView. Se hai bisogno di un martello molto grande, puoi prendere l'array di righe da qualsiasi DataTable.Select (" ... ") ed eseguire l'unione in un DataSet diverso.


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

Questo approccio per quello che stai cercando di fare è molto probabilmente eccessivo, ma ci sono casi in cui potresti aver bisogno di ottenere un datatable da una matrice di righe in cui è utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top