VB.NET - ComBobox no DataGridView com recurso autocompletar


No artigo de  hoje veremos um exemplo de como usar o recurso autocompletar do combobox em um controle DataGridView em uma aplicação Windows Forms usando a linguagem Visual Basic.

Abra o Visual Basic 2010 Express Edition e crie um novo projeto do tipo Windows Application com o nome ComboBox_AutoCompletar;

No formulário form1.vb inclua um controle DataGridView e a seguir vamos incluir no controle duas colunas do tipo ComboBox. Podemos fazer isso de duas formas :

1- A primeira forma é usar os recursos visuais e incluir as duas colunas conforme abaixo:

Selecione a opção Add Column em DataGridView Tasks:

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

Columa 1
  • Name - pais
  • Type - DataGridViewComboBoxColumn
  • Header Text - Pais

Coluna 2

  • Name - trabalho
  • Type - DataGridViewComboBoxColumn
  • Header Text - Tipos de Trabalho

O resultado final deste processo pode ser visto na figura a seguir:

2- A segunda forma é diretamente via código (esta é a forma que eu vou usar)

1- Versão VB .NET

Para isso no evento Load do formulário defina duas rotinas conforme abaixo:

  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        carregaCombo1()
        carregacombo2()
    End Sub

2- Versão C#

Na versão C# podemos usar o construtor do formulário:

 public Form1()
        {
            InitializeComponent();
            ComboList1();
            ComboList2();
        }

A seguir vamos definir as duas rotinas para criar as colunas e preencher os controles com os valores:

 Private Sub carregaCombo1()

        Dim combo1 As New DataGridViewComboBoxColumn()
        combo1.HeaderText = "Pais"
        combo1.Items.Add("Espanha")
        combo1.Items.Add("Portugal")
        combo1.Items.Add("Italia")
        combo1.Items.Add("Brasil")
        combo1.Items.Add("Argentina")
        combo1.Items.Add("Alemanha")
        DataGridView1.Columns.Add(combo1)

    End Sub
      public void carregaCombo1()
        {
            DataGridViewComboBoxColumn combo1 = new DataGridViewComboBoxColumn();
            combo1.HeaderText = "País";
            combo1.Items.Add("Espanha");
            combo1.Items.Add("Portugal");
            combo1.Items.Add("Italia");
            combo1.Items.Add("Brasil");
            combo1.Items.Add("Argentina");
            combo1.Items.Add("Alemanha");
            dataGridView1.Columns.Add(combo1);
        }
 Private Sub carregaCombo2()

        Dim combo2 As New DataGridViewComboBoxColumn()
        combo2.HeaderText = "Tipos de trabalho"
        combo2.Items.Add("Contabilidade")
        combo2.Items.Add("Construção")
        combo2.Items.Add("Finanças")
        combo2.Items.Add("Educação")
        combo2.Items.Add("Engenharia")
        DataGridView1.Columns.Add(combo2)

    End Sub
  public void carregaCombo2()
        {
            DataGridViewComboBoxColumn combo2 = new DataGridViewComboBoxColumn();
            combo2.HeaderText = "Tipos de Trabalho";
            combo2.Items.Add("Contabilidade");
            combo2.Items.Add("Construção");
            combo2.Items.Add("Finanças");
            combo2.Items.Add("Educação");
            combo2.Items.Add("Engenharia");
            dataGridView1.Columns.Add(combo2);
        }
Versão VB .NET
Versão C#

A seguir vamos definir no evento EditingControlShowing do controle DataGridView o código abaixo :

1 - versão VB .NET

Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) 
Handles DataGridView1.EditingControlShowing

        If TypeOf e.Control Is DataGridViewComboBoxEditingControl Then
            DirectCast(e.Control, ComboBox).DropDownStyle = ComboBoxStyle.DropDown
            DirectCast(e.Control, ComboBox).AutoCompleteSource = AutoCompleteSource.ListItems
            DirectCast(e.Control, ComboBox).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest
        End If

    End Sub

2 - Versão C#


  private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (e.Control is DataGridViewComboBoxEditingControl)
            {
                ((ComboBox)e.Control).DropDownStyle = ComboBoxStyle.DropDown;
                ((ComboBox)e.Control).AutoCompleteSource = AutoCompleteSource.ListItems;
                ((ComboBox)e.Control).AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.Suggest;
            } 
        }

As propriedades AutoCompleteMode e AutoCompleteSource definem um ComboBox que completa automaticamente as seqüências de entrada, comparando o prefixo sendo inserido para os prefixos de todas os valores de cada controle.

Isto pode ser útil para controles ComboBox nos quais URLs, endereços, nomes de arquivos ou comandos serão inseridos com freqüência.

Executando o projeto iremos obter:

Pegue o projeto completo aqui: ComboBox_AutoCompletar.zip (versão VB .NET)

Gálatas 5:16 Digo, porém: Andai pelo Espírito, e não haveis de cumprir a cobiça da carne.

Gálatas 5:17 Porque a carne luta contra o Espírito, e o Espírito contra a carne; e estes se opõem um ao outro, para que não façais o que quereis.

Referências:


José Carlos Macoratti