Você está na página 1de 8

C# - Acesso a dados Preenchendo um DataGridView

Atendendo diversos pedidos vou publicar uma srie de artigos mostrando como efetuar o acesso a dados usando a linguagem C#. Para comear vou mostrar como preencher um controle DataGriView em uma aplicao 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 comear usando o SharpDevelop 2.2 apenas para variar mas voc pode usar o Visual C# Express 2008.

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


Vou criar uma soluo 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 Soluo;

Na janela Novo Projeto selecione C#->Aplicaes Windows e na janela Modelos marque Aplicao Windows e informe o nome da soluo , no meu caso: AcessoDadosC;

A partir da janela Ferramentas abra a guia Data e selecione o controle DataGridView arrastando-o para o formulrio e configurando sua propriedade Dock para Top. A seguir na guia Windows Forms arraste o controle Button para o formulrio e defina sua propriedade Dock para Botton. O resultado final voc v na figura abaixo:

Inclua agora o cdigo do boto C# associado ao evento Click do boto 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 instruo SQL string strSql = "SELECT * FROM Clientes"; //cria a conexo com o banco de dados OleDbConnection con = new OleDbConnection(strProvider); //cria o objeto command para executar a instruao 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 cdigo 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 no poder atribuir o objeto DataReader a propriedade DataSource do controle. A estratgia que voc dever seguir a seguinte:

1- Obter quantas colunas existe na tabela; 2- Ler o nome de cada coluna e criar o cabealho 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 mtodo apropriado; Vamos incluir um novo controle Button no formulrio e digitar o cdigo 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 instruo SQL string strSql = "SELECT * FROM Clientes"; //cria a conexo com o banco de dados OleDbConnection con = new OleDbConnection(strProvider); //cria o objeto command para executar a instruao 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 nmero 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 cdigo inicial sendo que o cdigo destacado em amarelo o cdigo novo. Executando a soluo e clicando no boto - Preencher com DataReader - iremos obter:

J temos os cabealhos 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 mtodo para cada tipo de dados; assim em uma coluna do tipo Integer devemos usar o mtodo GetInt32() para obter o valor. - Ento temos que percorrer cada linha da tabela e verificar em cada coluna qual o tipo de dados para usar o mtodo adequado e obter o seu valor; - Para saber o tipo de dados de um coluna usaremos o mtodo GetFieldType() verificando se o mesmo uma string (System.String) ou um inteiro (System.Int32) ou uma data (System.Date) O cdigo 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 instruo SQL

string strSql = "SELECT * FROM Clientes"; //cria a conexo com o banco de dados OleDbConnection con = new OleDbConnection(strProvider); //cria o objeto command para executar a instruao 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 cdigo que foi includo esta destacado em amarelo. Executando o projeto iremos obter:

Embora aborde conceitos bsicos 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: Referncias: Retrieving Data Using the DataReader DataSet x DataReader - Umna questo de desempenho ? ADO.NET - Obtendo quantos registros um DataReader vai retornar Preenchendo um DataTable com um DataReader DataReader ou DataSet ? ADO.NET - Uma viso geral : Objetos Connection
Jos Carlos Macoratti

AcessoDadosC.zip

Você também pode gostar