Como faço para vincular o resultado de DataTable.Select () para um controle de caixa de listagem?
-
02-07-2019 - |
Pergunta
Eu tenho o seguinte código:
ListBox.DataSource = DataSet.Tables("table_name").Select("some_criteria = match")
ListBox.DisplayMember = "name"
O DataTable.Select()
método retorna uma matriz de System.Data.DataRow
objetos.
Não importa o que eu especificar na propriedade ListBox.DisplayMember
, tudo o que vejo é a caixa de listagem com o número correto de itens todos mostrando como System.Data.DataRow
em vez do valor que eu quero que está na coluna "name"
!
É possível ligar para a matriz resultante da DataTable.Select()
, em vez de loop através dele e adição de cada um para o ListBox
?
(Não tenho problema com looping, mas não parece um final elegante!)
Solução
Use a DataView .
ListBox.DataSource = new DataView(DataSet.Tables("table_name"), "some_criteria = match", "name", DataViewRowState.CurrentRows);
ListBox.DisplayMember = "name"
Outras dicas
Josh tem direito com o DataView. Se você precisa de um grande martelo, você pode tomar a matriz de linhas a partir de qualquer DataTable.Select ( "...") e fazer uma mesclagem em um DataSet diferente.
DataSet copy = new DataSet();
copy.Merge(myDataTable.Select("Foo='Bar'"));
// copy.Tables[0] has a clone
Essa abordagem para o que você está tentando fazer é provavelmente um exagero, mas há casos em que pode ser necessário para obter uma fora tabela de dados de uma matriz de linhas onde é útil.