Este é um post disponível para assinantes MVPConversão de List para DataTable - Revista .net Magazine 86
O artigo demonstra como converter os dados que foram carregados para uma lista genérica em um objeto do tipo DataTable. A principal finalidade é possibilitar que estes dados possam ser facilmente ordenados ao se usar um controle DataGridView de
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da .net Magazine 86
As pessoas usam programas de computador
para acessar seus dados de maneira organizada. Vendas, agendas, contabilidade,
estatística e muitas outras áreas de atividades humanas se beneficiam das
facilidades proporcionadas pelos programas de computador. Os programas
desenvolvidos em plataformas gráficas como o Windows agilizam o trabalho tanto
para o usuário como para o desenvolvedor desses programas. No framework .Net
isto é particularmente observado na maneira como os controles visuais são
facilmente preenchidos com dados oriundos das mais diversas fontes,
principalmente bancos de dados.
Recentemente o mapeamento objeto-relacional,
através do qual se procura quebrar a distância existente entre as linguagens de
programação e a maneira como os dados são armazenados e manipulados nos bancos,
evoluiu bastante e recursos como Entity Framework, LINQ (Language INtegrated
Query) e facilidades para manipulação de coleções de objetos na memória se
tornaram cada vez mais comuns. Estes recursos, no entanto, exigem mais do
desenvolvedor que, antes, usava os geradores de código automático.
Nota: Estes recursos ainda existem. Considerando
o DataSet Designer do Visual Studio, através do qual é bem simples fazer
mapeamento das tabelas de um banco de dados para uso no preenchimento de
controles visuais ou para se trabalhar no código de maneira mais organizada. No
entanto, muito do código gerado é desnecessário e muitas vezes penaliza o desempenho
da aplicação final.
Termos como S.O.L.I.D., Entity Framework,
Code First, entre outros, vêm tomando conta do vocabulário dos programadores
que, num surpreendente retorno às origens, voltaram a meter a mão na massa
tendo de voltar a escrever grande quantidade de código para criar programas
ágeis e bem feitos. Isso tudo tem um reflexo quando além da agilidade e boa
arquitetura a aplicação precisa ser amigável ao usuário final.
Existem alguns reflexos negativos quando,
por exemplo, usamos uma coleção de objetos baseados em uma lista genérica. O
controle DataGridView muito popular nos programas Windows Forms possui a
característica de permitir a ordenação automática de seu conteúdo ao se clicar
em um cabeçalho de uma coluna. Mesmo existindo outros recursos interessantes
deste controle, esta facilidade é perdida quando se usa uma lista genérica para
preencher este controle.
Isto acontece porque, para que as colunas
sejam automaticamente ordenadas é preciso código fazendo a ordenação dos dados
e isto deve ser explicitamente implementado, ou seja, o desenvolvedor deve
escrever código para esta tarefa.
Outra forma de se fazer isto é usar a
classe DataTable para preencher o controle. Como esta possui a lógica
necessária para fazer a ordenação e muitas tarefas da manipulação de dados,
acaba sendo a melhor escolha para preenchimento rápido dos dados neste tipo de
controle.
Porém, em muitos projetos os dados já são
passados neste formato não sendo possível reescrever a camada de acesso de
dados. Uma solução é obter os dados desta lista para preencher a classe
DataTable. Para tanto é preciso conhecer a estrutura da classe que compõe a
lista de dados e isto também pode ser feito com relativa facilidade dentro do
.Net usando Reflection.
Reflection e a estrutura de objetos
Dentre as muitas funcionalidades obtidas
com o uso de Reflection a principal é aquela que possibilita conhecer os
elementos que compõem uma classe. Usando as classes das bibliotecas System.Type
e System.Reflection o desenvolvedor pode ler os atributos, propriedades,
campos, métodos e construtores das classes que fazem parte de qualquer assembly
(executável ou class library) desenvolvido com as linguagens do framework .Net.
Isto é possível porque os assemblys são
criados em uma linguagem chamada Common Runtime Language (CLR) e possuem uma
estrutura que armazena os seus dados em uma tabela nestes arquivos, que por sua
vez, podem ser lidos por outros programas também desenvolvidos no framework.
Nota do DevMan
Reflection não é
uma exclusividade do .Net. É anterior ao mesmo, mas, com a CLR é implementado
com muito mais facilidade dentro deste ambiente permitindo que programadores
com poucos conhecimentos consigam obter produtividade ao lançar mão destas
técnicas. Naturalmente que programas desenvolvidos em outras plataformas como
os executáveis nativos para o Windows e outros sistemas operacionais permitem o
Reflection usando outros tipos de recursos. Uma demonstração disto é que os
programas do framework através do Interop podem consumir class librarys
desenvolvidas em outras linguagens.
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP
Space do autor


0
0
