Come associare il risultato di DataTable.Select () a un controllo ListBox?
-
02-07-2019 - |
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!)
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.