VB .NET - Preenchendo as colunas do tipo Combobox no DataGridView


Neste tutorial vou mostrar como preencher as colunas do tipo Combobox no DataGridView usando o VB .NET.

Em meu artigo eu mostrei como criar colunas do tipo combobox e preenchê-las via código.

Neste artigo vamos preencher as colunas obtendo as informações de um banco de dados relacional.

Eu vou usar como exemplo o banco de dados Northwind.mdb mas basta alterar a string de conexão que o exemplo pode ser usado com qualquer banco de dados suportado.

Abra o Visual Basic 2010 Express Edition e crie um novo projeto (File-> New Project) do tipo Windows Forms Application com o nome DataGridView_ComboBox;

A seguir, a partir da ToolBox inclua os controles DataGridView(gdvDados) e Button(btnPreencherCombo) no formulário form1.vb e defina o leiaute no formulário conforme a figura abaixo:

Figura 1.0 - Leiaute do formulário da aplicação

Na figura você nota que já foram definidas as colunas do tipo Combobox no DataGridView.

Para fazer isso você pode seguir os seguintes passos

1-) selecione a opção Add Column em DataGridView Tasks:

2-) Inclua duas colunas alterando as propriedades name, type e Header text conforme a abaixo:

Columa 1
  • Name - Produtos
  • Type - DataGridViewComboBoxColumn
  • Header Text - Produtos

Coluna 2

  • Name - Categorias
  • Type - DataGridViewComboBoxColumn
  • Header Text - Categorias

-3) O resultado final deste processo pode ser visto na figura 1.0 acima.

Nota: Podemos configurar outras propriedades para a coluna como a largura(Width) , ToolTipText, número de itens, etc.

Nota: Podemos obter o mesmo resultado via código para isso basta usar o código abaixo:

Dim Produtos As New DataGridViewComboBoxColumn()
Produtos.HeaderText = "Produtos"
DataGridView1.Columns.Add(combo1)

Dim Categorias As New DataGridViewComboBoxColumn()
Categorias.HeaderText = "Categorias"
DataGridView1.Columns.Add(combo1)

Agora vamos ao código que preenche as combobox.

Declare os namespaces usados no exemplo:

Imports System.Data
Imports System.Data.OleDb

Obs: Usei esses namespaces pois estou acessando o banco de dados Access. Para outro banco de dados utilize o respectivo namespace.

No evento Click do botão vamos colocar o código para acessar os dados e preencher as colunas do DataGridView:

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreencherCombo.Click

        'string de conexão com o banco de dados Northwind.mdb
        Dim stringConexao As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\dados\northwind.mdb;"

        'define a conexao, o comando e o adapter
        Dim conexao As New OleDbConnection(stringConexao)
        Dim cmd As New OleDbCommand("SELECT ProductID,ProductName FROM Products", conexao)
        Dim adapter As New OleDbDataAdapter(cmd)

        'define o dataset
        Dim ds As New DataSet
        Try
            adapter.Fill(ds, "Products") 'preenche o dataset
        Catch ex As Exception
            MessageBox.Show("Erro ao acessar os dados.")
            Exit Sub
        End Try

        'atribui o datasource a coluna combobox do datagridivew
        Me.Produtos.DataSource = ds.Tables("Products")
        'atribui o valor que será exibido na coluna 
        Me.Produtos.DisplayMember = "ProductName"
        'atribui o valor que será lido quando um item for selecionado
        Me.Produtos.ValueMember = "ProductID"

        'repete o procedimento para a tabela Categories para a coluna Categorias
        cmd.CommandText = "SELECT CategoryID,CategoryName FROM Categories"
        adapter.SelectCommand = cmd

        Try
            adapter.Fill(ds, "Categories")
        Catch ex As Exception
            MessageBox.Show("Erro ao acessar os dados.")
            Exit Sub
        End Try

        Me.Categorias.DataSource = ds.Tables("Categories")
        Me.Categorias.DisplayMember = "CategoryName"
        Me.Categorias.ValueMember = "CategoryID"

    End Sub

Executando o projeto e clicando no botão Preenche Combobox iremos obter:

 Pegue o projeto completo aqui: DataGridView_Combobox.zip

Filipenses 1:27 Somente portai-vos, dum modo digno do evangelho de Cristo, para que, quer vá e vos veja, quer esteja ausente, ouça acerca de vós que permaneceis firmes num só espírito, combatendo juntamente com uma só alma pela fé do evangelho;

Referências:

José Carlos Macoratti