Codificação Final: Introdução ao LINQ – Parte 4

Olá pessoal, neste artigo finalizaremos o exemplo criado na parte 3, usando os conceitos de LINQ. Acompanhem:

Se você não viu as partes anteriores desta série de artigos sugiro que as veja clicando aqui.

Continuando nosso exemplo, vá no modo Design do formulário, clique com o botão direito no ComboBox e clique em Edit Items. Na caixa de texto que surge adicione os seguintes itens, como é ilustrado na Figura 01:

Figura 01 – Itens do ComboBox, que serão os filtros do GridView

Agora dê dois cliques em cima do ComboBox para que o evento SelectedIndexChanged seja acionado. Nele iremos montar toda a lógica para que, quando o usuário selecionar determinado item, seja passado a instrução LINQ ao DataSource do GridView.

Vemos abaixo, na Listagem 01, toda a codificação do evento.

Listagem 01 – Evento SelectedIndexChanged do ComboBox



private void cboValores_SelectedIndexChanged(object sender, EventArgs e)

{

ListlstProducts = new List();

lstProducts = CarregarGridView();

BindingSource objBindingSource = new BindingSource();

switch (cboValores.SelectedIndex.ToString())

{

case "0":

objBindingSource.DataSource = from instrucao in lstProducts

where instrucao.ProductName.StartsWith("Ch")

select instrucao;

dgvProdutos.DataSource = objBindingSource;

break;

case "1":

objBindingSource.DataSource = from instrucao in lstProducts

where instrucao.UnitsInStock > 15

orderby instrucao.UnitsInStock

select instrucao;

dgvProdutos.DataSource = objBindingSource;

break;

case "2":

objBindingSource.DataSource = from instrucao in lstProducts

where instrucao.UnitPrice > 25

orderby instrucao.UnitPrice

select instrucao;

dgvProdutos.DataSource = objBindingSource;

break;

case "3":

objBindingSource.DataSource = from instrucao in lstProducts

where instrucao.UnitsInStock < 50

orderby instrucao.UnitsInStock descending

select instrucao;

dgvProdutos.DataSource = objBindingSource;

break;

case "4":

objBindingSource.DataSource = from instrucao in lstProducts

where instrucao.ProductName.EndsWith("s")

select instrucao;

dgvProdutos.DataSource = objBindingSource;

break;

default:

dgvProdutos.DataSource = null;

break;

}

}


Note que começo instanciando a lista genérica do tipo da classe Products, já vista na parte 3, e atribuo a ela o método CarregarGridView, assim tenho a lista carregada com os dados vindos do banco. Depois instancio um objeto da classe BindingSource, necessária para ser a fonte de dados de nosso GridView.

Em meu switch, uso como condição a propriedade SelectedIndex do ComboBox. Assim, dependendo do índice escolhido pelo usuário (lembrando que sempre começa em 0) é realizada a codificação do respectivo operador case.

Note que, dentro de todos os “cases”, a codificação é bem parecida: é atribuído a instrução LINQ a propriedade DataSource do objeto instanciado e o mesmo é passado como DataSource para o GridView.

Perceba também que a cláusula where que é a responsável por definir o filtro de minha busca, e em algumas instruções é usado também o operador orderby, usado para ordenar os registros, em ordem ascendente (padrão) ou descendente.

Os operadores e cláusulas citados aqui podem ser vistos na parte 2.

 Finalizando, acrescente ao formulário um botão com o texto Limpar Filtros, com o código da Listagem 02.

Listagem 02 – Botão Limpar Filtros



private void btnLimparFiltros_Click(object sender, EventArgs e)

{

ListlstProducts = new List();

lstProducts = CarregarGridView();

dgvProdutos.DataSource = lstProducts;

}


Assim caso quisermos ver todos os registros após começarmos as filtragens é só clicarmos no botão.

Rode a aplicação e altere os valores do ComboBox. A Figura 02 ilustra o resultado para o filtro de produtos terminados com a letra S.

Figura 02 – Filtro aplicado ao GridView

 Disponibilizo o código-fonte desta aplicação clicando aqui.

Assim finalizo a série de artigos sobre LINQ. Muito obrigado a todos!

Fiquem de olho no blog que farei mais artigos abordando outros providers do LINQ, como o LINQ To XML, por exemplo.

 Um abraço, e até o próximo artigo.

 Wellington Balbo de Camargo

wellingtonbalbo@gmail.com