C# - Busca dinâmica em DataGridView (importando dados do Excel)
Neste artigo vou mostrar como realizar uma busca dinâmica em um DataGridView que esta 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. A seguir vamos criar o código para realizar uma busca dinâmica no DataGridView.
Recursos Usados:
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 controle conforme o leiaute 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. Eu vou criar um arquivo chamado NotasAlunos.xlsx no Excel 2017 com o seguinte conteúdo:
Implementando as funcionalidades no formulário
Eu 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 importa 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 realiza a busca dinâmica Exibir Todos que exibe todos os registros
Para concluir vamos definir 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 igua a Contabilidade :
Pegue o código do projeto aqui : C_BuscaDinamica.zip
(Disse Jesus) - Eu sou a videira
verdadeira, e meu Pai é o lavrador.
Toda a vara em mim, que não dá fruto, a tira; e limpa toda aquela que dá fruto,
para que dê mais fruto.
João 15:1,2
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:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
VBA (Excel) - Copiando dados entre planilhas - Macoratti.net
Importando uma planilha Excel em um DataGridView - Macoratti.net
C# - Lendo, Incluindo e Atualizado dados de uma planilha Excel
C# - DataGridView - Salvando o conteúdo e realizando ... - Macoratti.net