C# - DataGridView  Básico para novatos (revisitado)


Esse artigo é resumo das algumas das funcionalidades do controle DataGridView usando a linguagem C#.(Eu já tenho um artigo sobre esse mesmo assunto usando a linguagem VB .NET.)

O DataGridView pode exibir dados em modo Bound, Unbound e Virtual:

O modo Bound é adequado para o gerenciamento de dados usando interação automática com o armazenamento de dados. Você pode vincular o controle diretamente com a fonte de dados definindo a propriedade DataSource.

Um uso muito comum do controle DataGridView é vincular uma tabela em um banco de dados usando uma fonte de dados como o SqldataSource, ObjectDataSource, XmlDataSource.

Quando o controle é vinculado aos dados, as linhas de dados são extraídas e exibidas sem a necessidade de intervenção do desenvolvedor. Quando a propriedade AutoGenerateColumns é igual a true cada coluna na fonte de dados irá corresponder com a coluna a ser criada no controle. Se você preferir criar suas próprias colunas defina esta propriedade como false e use a propriedade DataPropertyName para vincular cada coluna quando for configurá-la.

O modo Unbound é apropriado para a exibição de quantidades relativamente pequenas de dados que você gerencia via código.Você não vincula o controle diretamente a uma fonte de dados ao invés disso você precisa popular o controle você mesmo via código geralmente usando o método DataGridViewRowCollection.Add.

Este modo pode ser particularmente útil para dados estáticos e somente-leitura ou quando você desejar fornecer o seu próprio código para interagir com uma fonte de dados externa.

Modo virtual lhe da um maior grau de controle, permitindo que você implemente suas operações de gerenciamento de dados. Isso é necessário para manter os valores das colunas não vinculadas no modo vinculado quando controle é ordenado pela coluna vinculada. O uso desse modo permite otimizar o desempenho quando ocorre interação com uma grande quantidade de dados.

Recursos Usados:

DataGridView -  Criação da Solução

Abra o Visual Studio Express 2013 professional e crie um novo projeto clicando em New Project;

A seguir selecione o template : Other Project Types -> Blank Solution e informe o nome DataGridView_CSharp e clique no botão OK;
 

Agora vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando o tipo do projeto Windows Forms Application e informando o nome : DataGridView_CSharp1

1- Acessando e exibindo dados de uma tabela do SQL Server Local DB (antigo SQL Server Express)

Escolha um banco de dados SQL Server e uma tabela que deseja exibir no datagridview.

Neste exemplo eu vou usar o banco de dados Northwind.mdf e a tabela Customers.

Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando a Visual C#  -> Windows  e o tipo do projeto Windows Forms Application e informando o nome dgv_SQLSERVER;

No formulário form1.cs inclua os controles : DataGridView - dgvDados, Button (btnSQLServer) a partir da ToolBox conforme o leiaute abaixo:

Agora vamos definir os namespaces usados no formulário declarando-os via instrução using:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

A seguir no evento Click do botão de comando temos o código que acessa o banco de dados Northwind.mdf e a tabela Customers, e, através de um dataset obtém os dados e exibe no controle DataGridView:

        private void btnSQLServer_Click(object sender, EventArgs e)
        {
            try
            {
                //define a string de conexão
                string strConexao = "Data Source=(LocalDB)\\v11.0;Initial Catalog=Northwind;Integrated Security=True";
                //define o comando SQL
                string sql = "SELECT * FROM Customers";
                //cria uma nova conexão
                SqlConnection conexao = new SqlConnection(strConexao);
                //cria um dataadapter 
                SqlDataAdapter da = new SqlDataAdapter(sql, conexao);
                //cria um dataset
                DataSet ds = new DataSet();
                //abre a conexão
                conexao.Open();
                //preenche o dataset
                da.Fill(ds, "Customers");
                //fecha a conexão
                conexao.Close();
                //exibe o dados do dataset no datagridview
                dgvDados.DataSource = ds;
                dgvDados.DataMember = "Customers";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

Executando o projeto teremos o resultado abaixo:

2- Filtrando e ordenando dados em um DataGridView

Vamos fazer agora uma ordenação e filtro das informações exibida em um DataGridView.

Vamos incluir um novo projeto na solução via menu FILE -> Add New Project selecionando o tipo do projeto Windows Forms Application e informando o nome : DataGridView_CSharp2

A seguir vamos incluir os seguintes controles no formulário form1.cs :

Definindo o leiaute do formulário conforme a figura abaixo:

O objetivo é filtrar os dados por pais, que deverá ser informando na caixa de texto txtPais, e ordenar por um dos seguintes campos :  CustomerID,ContactName,City,Country ou Phone.

Vamos incluir uma nova rotina chamada ConectaSQLServer() que irá gerar o DataSet e exibir os dados no DataGridView:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;
namespace DataGridView_CSharp2
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
         //cria um dataset
         DataSet ds = new DataSet();
         private void btnSQLServer_Click(object sender, EventArgs e)
         {
             try
             {
                 ConectaSQLServer();
                 //exibe o dados do dataset no datagridview
                 dgvDados.DataSource = ds;
                 dgvDados.DataMember = "Customers";
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
         }
         private void ConectaSQLServer()
         {
             try
             {
                 //define a string de conexão
                 string strConexao = "Data Source=(LocalDB)\\v11.0;Initial Catalog=Northwind;Integrated Security=True";
                 //define o comando SQL
                 string sql = "SELECT CustomerID, ContactName, City, Country , Phone FROM Customers";
                 //cria uma nova conexão
                 SqlConnection conexao = new SqlConnection(strConexao);
                 //cria um dataadapter 
                 SqlDataAdapter da = new SqlDataAdapter(sql, conexao);
                 //abre a conexão
                 conexao.Open();
                 //preenche o dataset
                 da.Fill(ds, "Customers");
                 //fecha a conexão
                 conexao.Close();
             }
             catch (Exception ex)
             {
                 MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
             }
        }
    }
}

Agora vamos ao código para realizar a ordenação e filtrar os dados pelo país informado.

No evento Click do botão - Filtrar e Ordenar - inclua o código abaixo:

 private void btnFiltrar_Click(object sender, EventArgs e)
  {
             //cria um dataview com base no dataset e na tabela customers
             DataView dv = new DataView(ds.Tables["Customers"]);
             //define a ordenação e o filtro
             dv.AllowNew = false;
             dv.AllowDelete = true;
             dv.Sort = cboOrdenar.Text;
             dv.RowFilter = "Country Like '" + txtPais.Text + "*'";
             //exibe o resultado
             dgvDados.DataSource = dv;
  }

Estamos usando um DataView para realizar a ordenação e filtrar os dados.

Para ordenar os dados estamos usando a propriedade Sort que obtém ou define a coluna ou colunas para ordenar os dados no Dataview.

Para filtrar os dados estamos usando a propriedade RowFilter que obtém ou define a expressão usada para filtrar quais linhas são exibidas em DataView.

   dv.AllowNew = false;
   dv.AllowDelete = true;
   dv.Sort = cboOrdenar.Text;
   dv.RowFilter = "Country Like '" + txtPais.Text + "*'";
Finalmente para exibir o primeiro item do controle Combobox inclua o código abaixo no evento Load do formulário:
private void Form1_Load(object sender, EventArgs e)
 {
             cboOrdenar.SelectedIndex = 0;
 }

Abaixo vemos o resultado de um exemplo em execução:

Pegue o projeto completo aqui: DataGridView_CSharp.zip

Rom 7:4 Assim também vós, meus irmãos, fostes mortos quanto à lei mediante o corpo de Cristo, para pertencerdes a outro, àquele que ressurgiu dentre os mortos a fim de que demos fruto para Deus.

Rom 7:5 Pois, quando estávamos na carne, as paixões dos pecados, suscitadas pela lei, operavam em nossos membros para darem fruto para a morte.

Rom 7:6 Mas agora fomos libertos da lei, havendo morrido para aquilo em que estávamos retidos, para servirmos em novidade de espírito, e não na velhice da letra.

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