Ferramentas de Usuário

Ferramentas de Site


dev_net:vb.net:datagridviewcomboboxcolumn_editavel

DataGridViewComboBoxColumn Editável

A DataGridViewComboBoxColumn é uma coluna onde estão diversas DataGridViewComboBoxCell, ou seja, caixas de selecção que permitem seleccionar um item de uma lista de itens. Esses itens podem ser definidos de diversas formas e podem mesmo estar ligados a uma fonte de dados. No entanto, e através de uma inserção normal, não é possível editar a ComboBox.

Uma das formas de o fazer é utilizando o evento EditingControlShowing para alterar o tipo de ComboBox, de modo a permitir a edição. Esta opção não está disponível no IDE como propriedade e é possível apenas consegui-lo através de código.

Exemplo

Este pequeno exemplo mostra como o fazer, sendo diferente se a ComboBox estiver vinculada a uma fonte de dados. No entanto este exemplo mostra o processo a seguir.

    Private dgvComboColumn As DataGridViewComboBoxColumn
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
        ' Definições da ComboBoxColumn e insere alguns itens
        dgvComboColumn = New DataGridViewComboBoxColumn
        With dgvComboColumn
            .Name = "ComboBoxColumn"
            .HeaderText = "Seleccionar"
            .Items.AddRange(New Object() {"Banana", "Morango", "Laranja"})
        End With
 
        ' Adiciona a ComboBoxColumn à DataGridView
        Me.DataGridView1.Columns.Add(dgvComboColumn)
 
    End Sub
 
    ' No evento EditingControlShowing vai alterar o tipo de ComboBox
    Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
 
        ' Verifica se a coluna é a pretendida e define o novo tipo (DropDown)
        If Me.DataGridView1.CurrentCell.ColumnIndex = dgvComboColumn.Index Then
 
            Dim cb As ComboBox = DirectCast(e.Control, ComboBox)
            cb.DropDownStyle = ComboBoxStyle.DropDown
 
            ' Adiciona um evento para verificar se é um novo item
            AddHandler cb.Leave, AddressOf comboBoxLeave
 
        End If
 
    End Sub
 
     ' Quando o focus sai da ComboBox
     Sub comboBoxLeave(ByVal sender As Object, ByVal e As System.EventArgs)
 
        Dim cb As ComboBox = DirectCast(sender, ComboBox)
 
        ' Caso o item não esteja na lista
        If Not dgvComboColumn.Items.Contains(cb.Text) Then
 
            Dim msg As String = "Deseja inserir este novo item na lista ?"
 
            Dim result As DialogResult
            result = MessageBox.Show(msg, My.Application.Info.Title, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
 
            ' Caso pretenda inserir o novo item, adiciona-o
            If result = Windows.Forms.DialogResult.Yes Then
 
                dgvComboColumn.Items.Add(cb.Text)
 
                ' Selecciona o novo item
                Me.DataGridView1("ComboBoxColumn", DataGridView1.CurrentRow.Index).Value = cb.Text
 
            End If
 
        End If
 
    End Sub

Autoria

Este artigo foi inicialmente escrito por Jorge Paulino para o seu blog VBTuga - Visual Basic em Português.

dev_net/vb.net/datagridviewcomboboxcolumn_editavel.txt · Última modificação em: 2018/05/14 21:37 (edição externa)