Neste artigo vou mostrar como realizar uma busca dinâmica em um DataGridView que está exibindo dados importados do Excel usando a linguagem C#.
Vamos criar uma aplicação Windows Forms na linguagem C# que vai importar um arquivo Excel exibindo os dados em um DataGridView. Em seguida vamos criar o código para realizar uma busca dinâmica no DataGridView.
Recursos usados:
- VS 2017 Community (update 15.4.2)
- Excel (97-2003 e/ou 2007 o superior)
Criando o projeto Windows Forms
Abra o VS 2017 Community e crie um projeto do tipo Windows Forms App com o nome C_BuscaDinamica:

No formulário Form1.cs do projeto inclua os seguintes controles:
- 1 Combobox – cboBusca
- 1 TextBox – txtCriterio
- 2 Buttons – btnProcurar, btnExibirTodos
- 1 DataGridView – dgvDados
- 1 TextBox – txtArquivoExcel
- 2 Buttons – btnLocalizarArquivoExcel, btnImportaExcel
- 1 OpenFileDialog – ofd1
Disponha os controles conforme o layout da figura abaixo:

Declare os seguintes namespaces no formulário:
using System;
using System.Data;
using System.Data.OleDb;
using System.IO;
using System.Linq;
using System.Windows.Forms;
No início do formulário defina uma variável chamada arquivoExcel que vai conter o nome do nosso arquivo Excel que criaremos a seguir:
string arquivoExcel = @”NotasAlunos2017.xlsx”;
Preparando o arquivo Excel
Agora crie um arquivo Excel ou use um já existente. Criarei um arquivo chamado NotasAlunos.xlsx no Excel 2017 com o seguinte conteúdo:

Implementando as funcionalidades no formulário
Vou usar uma abordagem bem simples, onde vamos definir todo o código no formulário do projeto. Fiz assim para tornar o exemplo mais simples.
1- Criando o método para importar o arquivo Excel
Este método será usado para importar os dados do Excel e exibí-los no DataGridView:
private void CarregaDadosExcel()
{
try
{
//limpa o combobox
cboBusca.Items.Clear();
//converte os dados do Excel para um DataTable
DataTable dt = GetTabelaExcel(arquivoExcel);
//ajusta a largura das colunas aos dados
dgvDados.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;
dgvDados.DataSource = dt;
//No total de registros
lblRegistros.Text = (dgvDados.Rows.Count - 1).ToString();
string[] listaNomeColunas = dt.Columns.OfType<DataColumn>().Select(x => x.ColumnName).ToArray();
//Adiciona os nomes das colunas no Combobox
cboBusca.Items.AddRange(listaNomeColunas);
if (cboBusca.Items.Count > 0)
cboBusca.SelectedIndex = 0;
}
catch (Exception ex)
{
MessageBox.Show("Erro :" + ex.Message);
}
}
Esse código obtém os dados do arquivo Excel e o converte para um DataTable preenchendo o combobox com os nomes das colunas e exibindo os dados no datagridview.
Precisamos definir o método GetTabelaExcel (arquivoExcel) cujo código é mostrado a seguir:
private DataTable GetTabelaExcel(string arquivoExcel)
{
DataTable dt = new DataTable();
try
{
//pega a extensão do arquivo
string Ext = Path.GetExtension(arquivoExcel);
string connectionString = "";
//verifica a versão do Excel pela extensão
if (Ext == ".xls")
{ //para o Excel 97-03
connectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source =" + arquivoExcel + "; Extended Properties = 'Excel 8.0;HDR=YES'";
}
else if (Ext == ".xlsx")
{ //para o Excel 07 e superior
connectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source =" + arquivoExcel + "; Extended Properties = 'Excel 8.0;HDR=YES'";
}
OleDbConnection conn = new OleDbConnection(connectionString);
OleDbCommand cmd = new OleDbCommand();
OleDbDataAdapter dataAdapter = new OleDbDataAdapter();
cmd.Connection = conn;
conn.Open();
DataTable dtSchema;
dtSchema = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
string nomePlanilha = dtSchema.Rows[0]["TABLE_NAME"].ToString();
conn.Close();
//le todos os dados da planilha para o Data Table
conn.Open();
cmd.CommandText = "SELECT * From [" + nomePlanilha + "]";
dataAdapter.SelectCommand = cmd;
dataAdapter.Fill(dt);
conn.Close();
}
catch (Exception ex)
{
throw ex;
}
return dt;
}
Neste código verificamos qual a versão do Excel pela extensão do arquivo informado, e a seguir montamos a string de conexão para obter os dados da planilha e exibir no DataGridView.
2- Código dos botões para localizar e importar o arquivo Excel
Vamos definir o código no evento Click do botão de comando para localizar o arquivo Excel:
private void btnLocalizaArquivoExcel_Click(object sender, EventArgs e)
{
DialogResult drResult = ofd1.ShowDialog();
if (drResult == System.Windows.Forms.DialogResult.OK)
txtArquivoExcel.Text = ofd1.FileName;
}
Neste código vamos abrir uma caixa de diálogo OpenFileDialog e atribuir o nome do arquivo selecionado na caixa de texto.
Depois, vamos definir o código do evento Click do botão Importar Excel:
private void btnImportaExcel_Click(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(txtArquivoExcel.Text) && File.Exists(txtArquivoExcel.Text))
{
arquivoExcel = txtArquivoExcel.Text;
CarregaDadosExcel();
}
else
{
CarregaDadosExcel();
}
}
3- Código dos botões “Procurar” que realizam a busca dinâmica “Exibir Todos”, que por sua vez exibe todos os registros
Para concluir, definiremos o código do botão “Procurar”:
private void btnProcurar_Click(object sender, EventArgs e)
{
try
{
((DataTable)dgvDados.DataSource).DefaultView.RowFilter = string.Format("" + cboBusca.Text + " like '%{0}%'", txtCriterio.Text.Trim().Replace("'", "''"));
lblRegistros.Text = (dgvDados.Rows.Count - 1).ToString();
}
catch (Exception ex)
{
MessageBox.Show("Erro :" + ex.Message);
}
}
Neste código estamos usando um DefaultView.RowFilter que define a expressão usada para filtrar quais linhas são exibidas no DataView.
Na consulta, obtemos o nome da coluna do combobox e o critério informado na caixa de texto usando a cláusula like ‘%{0}%’.
A seguir, temos o código do evento Click do botão “Exibir Todos”:
private void btnExibirTodos_Click(object sender, EventArgs e)
{
CarregaDadosExcel();
}
Executando o projeto, iremos obter:
1- Carregando os dados da planilha Excel no DataGridView e preenchendo o combobox:

2- Realizando uma consulta filtrando pelo Curso igual a Contabilidade:

Pegue o código do projeto aqui: C_BuscaDinamica.zip




