C# - Acesso a dados - Preenchendo um DataGridView


Neste artigo veremos como preencher um controle DataGriView em uma aplicação Windows Forms. Vamos lá...

Para acompanhar os exemplos mostrados no artigo você deve possuir instaladas as seguintes ferramentas:

1- Preenchendo o DataGridView com dados de um banco de dados Access com um DataTable

Vou criar uma solução Windows para exibir os dados da tabela Clientes do banco de dados Cadastro.mdb cuja estrutura é a seguinte:

Abra o SharpDevelop e no menu Arquivo selecione Novo e em seguida Solução;

Na janela Novo Projeto selecione C#->Aplicações Windows e na janela Modelos marque Aplicação Windows e informe o nome da solução , no meu caso: AcessoDadosC;

A partir da janela Ferramentas abra a guia Data e selecione o controle DataGridView arrastando-o para o formulário e configurando sua propriedade Dock para Top. A seguir na guia Windows Forms arraste o controle Button para o formulário e defina sua propriedade Dock para Botton.

O resultado final você vê na figura abaixo:

Inclua agora o código do botão C# associado ao evento Click do botão conforme abaixo:

void Button1Click(object sender, EventArgs e)
{
  
//define a string de conexao com provedor caminho e nome do banco de dados
   string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dados\\Cadastro.mdb";
  
//define a instrução SQL
   string strSql = "SELECT * FROM Clientes";

  
//cria a conexão com o banco de dados
   OleDbConnection con = new OleDbConnection(strProvider);
  
//cria o objeto command para executar a instruçao sql
   OleDbCommand cmd = new OleDbCommand(strSql, con);

  
//abre a conexao
   con.Open();

   //define o tipo do comando
   cmd.CommandType = CommandType.Text;
   //cria um dataadapter
   OleDbDataAdapter da = new OleDbDataAdapter(cmd);

   //cria um objeto datatable
   DataTable clientes = new DataTable();

   //preenche o datatable via dataadapter
   da.Fill(clientes);

   //atribui o datatable ao datagridview para exibir o resultado
   dataGridView1.DataSource = clientes;
}

Nota: Lembrando que temos que declarar os namespaces :

using System.Data;
using
System.Data.OleDb
;

O código acima esta todo comentado e retorna todos os dados da tabela Clientes exibindo-os no DataGridView conforme abaixo:

2- Exibindo os dados em um DataGridView com DataReader

Se você desejar usar o DataReader (OledDb ou Sql) para ler os registros da tabela e exibir no DataGridView vai ter um pouco mais de trabalho pois não poderá atribuir o objeto DataReader a propriedade DataSource do controle.

A estratégia que você deverá seguir é a seguinte:

1- Obter quantas colunas existe na tabela;

2- Ler o nome de cada coluna e criar o cabeçalho no DataGridView;

3- Ler cada um dos registros e verificar qual o tipo de dados de cada uma das colunas;

4- Obter o valor da coluna usando o método apropriado;

Vamos incluir um novo controle Button no formulário e digitar o código abaixo no seu evento Click():

void Button2Click(object sender, EventArgs e)

{

   //define a string de conexao com provedor caminho e nome do banco de dados

   string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\dados\\Cadastro.mdb";

   //define a instrução SQL

   string strSql = "SELECT * FROM Clientes";

   //cria a conexão com o banco de dados

   OleDbConnection con = new OleDbConnection(strProvider);

   //cria o objeto command para executar a instruçao sql

   OleDbCommand cmd = new OleDbCommand(strSql, con);

   //abre a conexao

   con.Open();

   //define o tipo do comando

   cmd.CommandType = CommandType.Text;

   //obtem um datareader

   OleDbDataReader dr = cmd.ExecuteReader();

 

   //Obtem o número de colunas

   int nColunas = dr.FieldCount;

 

   //percorre as colunas obtendo o seu nome e incluindo no DataGridView

   for (int i=0; i < nColunas; i++)

   {

       dataGridView1.Columns.Add(dr.GetName(i).ToString() ,dr.GetName(i).ToString());

   }

}

Note que repetimos o código inicial sendo que o código destacado em amarelo é o código novo. Executando a solução e clicando no botão - Preencher com DataReader -  iremos obter:

Já temos os cabeçalhos das colunas no DataGridView criadas com os nomes das colunas da tabela Clientes falta percorrer os registros e preencher o controle.

Para fazer isso devemos tomar os seguintes cuidados:

- Quanto obtemos o dado de um coluna em um DataReader temos que especificar o tipo de dados pois a um método para cada tipo de dados; assim em uma coluna do tipo Integer devemos usar o método GetInt32() para obter o valor.

- Então temos que percorrer cada linha da tabela e verificar em cada coluna qual o tipo de dados para usar o método adequado e obter o seu valor;

- Para saber o tipo de dados de um coluna usaremos o método GetFieldType() verificando se o mesmo é uma string (System.String) ou um inteiro (System.Int32) ou uma data (System.Date)

O código que devemos incluir para obter o resultado esperado pode ser visto a seguir:

void Button2Click(object sender, EventArgs e)

{

   //define a string de conexao com provedor caminho e nome do banco de dados

   string strProvider = "Provider=Microsoft.Jet.OLEDB.4.0;Data    Source=c:\\dados\\Cadastro.mdb";

   //define a instrução SQL

   string strSql = "SELECT * FROM Clientes";

   //cria a conexão com o banco de dados

   OleDbConnection con = new OleDbConnection(strProvider);

   //cria o objeto command para executar a instruçao sql

   OleDbCommand cmd = new OleDbCommand(strSql, con);

   //abre a conexao

   con.Open();

   //define o tipo do comando

   cmd.CommandType = CommandType.Text;

 

   //obtem um datareader

   OleDbDataReader dr = cmd.ExecuteReader(); 

   int nColunas = dr.FieldCount;

   for (int i=0; i < nColunas; i++)

   {

      dataGridView1.Columns.Add(dr.GetName(i).ToString() ,dr.GetName(i).ToString());

   }

 

   //define um array de strings com nCOlunas

   string[] linhaDados = new string[nColunas];

  //percorre o DataRead

  while (dr.Read())

  {

     //percorre cada uma das colunas

     for (int a =0 ; a < nColunas; a++)

    {

        //verifica o tipo de dados da coluna

        if (dr.GetFieldType(a).ToString() == "System.Int32")

      {

            linhaDados[a] = dr.GetInt32(a).ToString();

      }

       if (dr.GetFieldType(a).ToString() == "System.String")

     {

           linhaDados[a] = dr.GetString(a).ToString();

       }

         if (dr.GetFieldType(a).ToString() == "System.DateTime")

     {

           linhaDados[a] = dr.GetDateTime(a).ToString();

      }

   }

    //atribui a linha ao datagridview

    dataGridView1.Rows.Add(linhaDados);

}

}

O  código que foi incluído esta destacado em amarelo. Executando o projeto iremos obter:

Embora aborde conceitos básicos este artigo mostrou como podemos tratar os dados a partir de um DataReader exibindo-os em um DataGridView() usando C#.

Pegue o projeto completo para SharpDevelop aqui:  AcessoDadosC.zip

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

 

             Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter
 

Referências:


José Carlos Macoratti