Para começar, vou mostrar 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:
– Visual C# Express Edition ou o SharpDevelop 2.2
Eu vou começar usando o SharpDevelop 2.2 apenas para variar, mas você pode usar o Visual C#↳C#68 conteúdosNovidades do C# 8.0: Default Interface MembersDev (Back & Front) · jun 2019C# 8.0 – Conheça suas novas funcionalidadesDev (Back & Front) · mai 2019Novidades do C# 8.0: Switch ExpressionsDev (Back & Front) · mar 2019Ver tudo em Dev (Back & Front) → Express 2008.
1- Preenchendo o DataGridView com dados de um banco de dados↳Banco de dados134 conteúdosSQL ou NoSQL: eis a questão!!Data · mar 2020Banco de dados: como organizar e dar segurança para milhões de dados de loteriasData · mai 20215 serviços gratuitos na cloud para bancos de dados PostgresData · fev 2025Ver tudo em Data → 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 está 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 à 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 há 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 está 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
Referências:
Retrieving Data Using the DataReader
DataSet x DataReader – Uma questão de desempenho?
ADO.NET – Obtendo quantos registros um DataReader vai retornar
Preenchendo um DataTable com um DataReader
DataReader ou DataSet?
ADO.NET – Uma visão geral : Objetos Connection







