C# - Localizando registros com DataGridView


 Neste artigo veremos como localizar e exibir registros usando o DataGridView e o CurrencyManager.

Hoje vamos recordar como realizar a busca de dados usando um critério para localizar registros exibidos em um DataGridView executando uma consulta na tabela Customers do banco de dados Northwind.

A string de conexão com o banco de dados será armazenada no arquivo App.Config da aplicação :

Para obter o valor da string de conexão vamos usar a classe ConfigurationManager que requer uma referência ao namespace System.Configuration no projeto via menu Project -> Add Reference :

Vamos usar também o DataView que permite criar diferentes exibições de dados armazenados em um DataTable, e, o CurrencyManager que gerencia uma lista de objetos vinculados.

Recursos Usados:

Criando o projeto Windows Forms

Abra o VS 2017 Community e crie um projeto usando o template Windows Desktop -> Windows Forms App(.NET Framework) e informe o nome WF_DataGridView;

Pela simplicidade do projeto eu não vou criar uma camada de acesso a dados. Considere isso como uma concessão que você quase nunca deve fazer.

A camada de interface com o usuário é o formulário Form1 que possui os seguintes controles:

  • 2 Panels
  • 1 DataGridView - dtgv1
  • 1 TextBox - txtCriterio
  • 1 Button - btnLocalizar , FlatStyle = Flat, MouseDownBackColor = White, MouseOverBackColor = 255;128,0 , Forecolor = White, 

Os namespaces usados no formulário são:

using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

No início do formulário vamos declarar as variáveis do tipo DataView e CurrencyManager:

private DataView dv;
private CurrencyManager cm;

No construtor do formulário vamos chamar o método ConfiguraGridView() cujo código vemos a seguir:

Este método define algumas configurações para o DataGridView usado no formulário.

No evento Load do formulário vamos chamar o método GetDataView() obter um DataView com os dados e exibir no controle DataGridView criando um Currency Manager :

Abaixo temos o código do método GetDataView() que obtém a string de conexão,  monta a consulta SQL e preenche um DataTable com os dados obtidos, criando um DataView ordenados pelo nome da primeira coluna :

No evento Click do botão Procurar temos o código que vai realizar a busca pelo critério informado pelo usuário conforme a coluna do DataGridView selecionada :

       private void btnLocalizar_Click(object sender, EventArgs e)
        {
            if (txtCriterio.Text != "")
            {
                bool parseStatus = false;
                switch (dtgv1.SortedColumn.Index)
                {
                    case 0:
                        // se a ordenação estiver na primeira coluna
                        // é necessário garantir que o valor da busca seja 
                        // um valor inteiro (caso esta coluna seja um inteiro)
                        //int j;
                        //parseStatus = int.TryParse(txtCriterio.Text, out j);
                        //break;
                    case 1:
                    case 2:
                        // A segunda e terceira coluna são strings
                        // assim o valor da busca não precisa ser validado
                        parseStatus = true;
                        break;
                }
                if (parseStatus)
                {
                    // Encontra o cliente
                    int i = dv.Find(txtCriterio.Text);
                    if (i < 0)
                        // Não Foi encontrado
                        MessageBox.Show("Nenhum registro foi encontrado.", "Procurar",
                            MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
                    else
                        // Reposiciona o registro do grid usndo o CurrencyManager.
                        cm.Position = i;
                }
                else
                {
                    MessageBox.Show("O tipos de dados do valor da busca " +
                        "deve ser do tipo da coluna ordenada.",
                        "Procurar", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    txtCriterio.Focus();
                }
            }
            else
            {
                MessageBox.Show("Informe o critério de busca.", "Procurar",
                    MessageBoxButtons.OK, MessageBoxIcon.Question);
                txtCriterio.Focus();
            }
        }

Usamos o método Find do DataView para procurar linhas no DataGridView conforme a chave de classificação usada.

O método Find retorna um inteiro com o índice do DataRowView que corresponde aos critérios de pesquisa. Se mais de uma linha corresponder aos critérios de pesquisa, apenas o índice da correspondência da primeira DataRowView é retornado. Se nenhuma correspondência for encontrada, localizar retornará -1.

Pronto ! Executando o projeto iremos obter o seguinte resultado:

Pegue o projeto aqui :    WF_DataGridView.zip

"Há um só corpo e um só Espírito, como também fostes chamados em uma só esperança da vossa vocação;
Um só Senhor, uma só fé, um só batismo;
Um só Deus e Pai de todos, o qual é sobre todos, e por todos e em todos vós."
Efésios 4:4-6

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 ?

Referências:


José Carlos Macoratti