Neste artigo vou mostrar como carregar dados em um DataGridView usando uma consulta LINQ dinâmica que cria uma nova estrutura de dados usando Select new. |
Com LINQ podemos usar uma expressão de consulta que pode criar uma nova estrutura de dados. Essa estrutura é composta de objetos compostos.
Com a cláusula Select New podemos criar novos objetos de um tipo anônimo como resultado de uma consulta de forma dinâmica. A criação é feita durante a avaliação da expressão usando Lazy Loading.
Lazy Load é o mecanismo utilizado para carregar informações sobre demanda. Esse mecanismo torna as entidades mais leves, pois suas associações são carregadas apenas no momento em que o método que disponibiliza o dado associativo é chamado. Assim quando objetos são retornados por uma consulta, os objetos relacionados não são carregados ao mesmo tempo, ao invés, eles são carregados quando a expressão de consulta é avaliada. É também conhecido como "lazy loading". |
No exemplo vamos mostrar um exemplo bem simples de como usar o recurso.
Carregando uma nova estrutura de dados com Select New
Vamos criar uma aplicação Windows Forms Application usando o Visual Studio 2015 Community com o nome CSharp_Dynamic_Linq1.
A seguir vamos criar uma classe Tarefa com o seguinte código:
public class Tarefa { public string Nome { get; set; } public string Servico { get; set; } public string Descricao { get; set; } public DateTime Inicio { get; set; } public DateTime Fim { get; set; } } |
Temos aqui uma simples classe POCO.
Agora no formulário padrão inclua um controle DataGridView (dgvTarefas) , um componente BindingSource(bsTarefa) e um Button(btnCarregar) :
Agora no evento Click do botão de comando vamos incluir uma chamada ao método carregarDados() que iremos implementar conforme o código a seguir:
public void carregarDados()
{
List<Tarefa> listaTarefas = new List<Tarefa>()
{
new Tarefa() { Nome = "Calibração", Servico="Leitura", Inicio= DateTime.Now.AddDays(-2),
Fim = DateTime.Now.AddDays(-2), Descricao="Processo de calibração concluído sem erros"},
new Tarefa() { Nome = "Alocação", Servico="Gravação", Inicio= DateTime.Now.AddDays(-2),
Fim = DateTime.Now.AddDays(-1), Descricao="Alocação remota de recursos realizada com delay de 50 minutos."},
new Tarefa() { Nome = "Compra de Estoque", Servico="DataWarehousing", Inicio= DateTime.Now,
Fim = DateTime.Now, Descricao="Compra de produtos com transporte."}
};
var items = from dados in listaTarefas
select new
{
NomeOperacao = dados.Nome,
Inicio = dados.Inicio.ToShortDateString(),
Fim = dados.Fim.ToShortDateString(),
Operacao = dados.Servico,
Descricao = dados.Descricao
};
bsTarefa.DataSource = items;
dgvTarefas.DataSource = bsTarefa;
// atributos do grid : estilo da borda e autosize
dgvTarefas.BorderStyle = BorderStyle.Fixed3D;
dgvTarefas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
}
|
O código cria uma lista de tarefas e a seguir usa uma consulta LINQ que extrai uma nova estrutura de dados a partir da lista de tarefas usando Select New.
O resultado é atribuído ao BindingSource que a seguir é atribuído ao DataGridView exibindo o resultado.
Executando o projeto teremos o seguinte resultado:
Nota: O código VB .NET do método carregarDados() é dado a seguir:
Public Sub carregarDados()
Dim listaTarefas As New List(Of Tarefa)() From {
New Tarefa() With {
.Nome = "Calibração",
.Servico = "Leitura",
.Inicio = DateTime.Now.AddDays(-2),
.Fim = DateTime.Now.AddDays(-2),
.Descricao = "Processo de calibração concluído sem erros"
},
New Tarefa() With {
.Nome = "Alocação",
.Servico = "Gravação",
.Inicio = DateTime.Now.AddDays(-2),
.Fim = DateTime.Now.AddDays(-1),
.Descricao = "Alocação remota de recursos realizada com delay de 50 minutos."
},
New Tarefa() With {
.Nome = "Compra de Estoque",
.Servico = "DataWarehousing",
.Inicio = DateTime.Now,
.Fim = DateTime.Now,
.Descricao = "Compra de produtos com transporte."
}
}
Dim items = From dados In listaTarefas
Select New With
{
.NomeOperacao = dados.Nome,
.Inicio = dados.Inicio.ToShortDateString(),
.Fim = dados.Fim.ToShortDateString(),
.Operacao = dados.Servico,
.Descricao = dados.Descricao
}
bsTarefa.DataSource = items
dgvTarefas.DataSource = bsTarefa
' atributos do grid : estilo da borda e autosize
dgvTarefas.BorderStyle = BorderStyle.Fixed3D
dgvTarefas.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
End Sub
|
Pegue o projeto aqui : CSharp_Dynamic_Linq1.zip
"Verdadeiramente ele (Jesus) tomou
sobre si as nossas enfermidades, e as nossas dores levou sobre si; e nós o
reputávamos por aflito, ferido de Deus, e oprimido."
Isaías 53:4
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Visual Studio - Dica de produtividade - Quick Launch - Macoratti.net
Visual Studio - Dica de produtividade - Nuget - Macoratti.net
NET - Design Patterns - Uma abordagem Prática - Macoratti.net