none
Incluir item no início de um combobox RRS feed

  • Pergunta

  • Salve!

    Estou usando VB2005 .

    Tenho um combobox na minha tela que foi populado a partir de uma lista, conforme código abaixo:

    Private Sub CarregaNomes()
    
      cboNomes.DataSource = New DLL_Windows.EmpregadosW().ListarEmpregados()
      cboNomes.DisplayMember = "nome"
      cboNomes.ValueMember = "colaboradorID"
     End Sub
    
    

    Gostaria que a primeira opção fosse "Selecione ..." com um valor arbitrado e que só depois dessa entrariam os itens provenientes da lista. No ASP.Net isso é feito de uma forma simples.

    Tem como fazer isso no Windows Forms?

    Grato pela atenção de todos.

    Paulo Ricardo Ferreira

    segunda-feira, 22 de novembro de 2010 12:54

Respostas

  • Olá PRicardo,

    Exatamente. Acho que, para poderes adicionar itens além dos items da tua lista do método ListarEmpregados, não poderás utilizar o DataSource. Ou utilizar o DataSource com uma lista alterada. Segue duas idéias:

    1) Adicionar um item avulso no combo, com string "Selecione..." e, em seguida, percorrer a lista do método ListarEmpregados com For Each, adicionando 1 a 1 dos itens:

     

    ''Considei o retorno do teu metodo ListarEmpregados como 
    ''um ArrayList; mas usei esse tipo soh para o exemplo.
    Dim lista As ArrayList = ListarEmpregados()
    ComboBox1.Items.Clear()
    ComboBox1.Items.Add("Selecione...")
    For Each empreg As Empregado In lista
      ComboBox1.Items.Add(empreg.Nome)
    Next
    ComboBox1.SelectedIndex = 0
    

     

    2) Adicionar um item avulso na lista de empregados, e então adicionar a lista ao DataSource do Combo:

     

    Dim lista As ArrayList = ListarEmpregados()
    
    ''Esse eh o item avulso na lista, com a expressao "Selecione..."
    Dim objSelec As New Empregado
    objSelec.nome = "Selecione..."
    objSelec.colaboradorID = 0
    
    lista.Insert(0, objSelec)
    ComboBox1.Items.Clear()
    ComboBox1.DataSource = lista
    ComboBox1.DisplayMember = "nome"
    ComboBox1.ValueMember = "colaboradorID"
    ComboBox1.SelectedIndex = 0
    

     

     

    No exemplo 1, tens a desvantagem de não poder usar o valueMember do combo, para obteres o ID do empregado selecionado.

    O exemplo 2 parece um pouco mais trabalhoso, mas acho que resolve o teu problema.

    Sds.,


    Daniel Ethur Porto Alegre/RS
    • Editado Daniel Ethur segunda-feira, 22 de novembro de 2010 14:28 faltou especificar o nro do exemplo no penúltimo parágrafo.
    • Marcado como Resposta PRicardo Ferreira segunda-feira, 22 de novembro de 2010 15:31
    segunda-feira, 22 de novembro de 2010 14:27

Todas as Respostas

  • Paulo,

    Na verdade, quando você utiliza o Datasource do ComboBox você deverá inserir um item vazio na sua lista.

    Este seria o jeito mais simples de se fazer isto.

    at.,


    Rogério de Resende Ohashi | Ohashi.NET (.NET, Security, C#, WinForms, WCF, Workflow, Azure, Windows Phone, Mono)
    segunda-feira, 22 de novembro de 2010 13:12
    Moderador
  • Caro Ricardo,

    Nenhuma das sugestões dos links ajudou.

    Não aparece pra mim a opção ListItem que consta na sugestão do 2º link. Da mesma forma não consigo fazer o mesmo para a sugestão do 3º link.

    Grato pela sua atenção.

    Paulo Ricardo Ferreira

    segunda-feira, 22 de novembro de 2010 13:28
  • Caro Rogério,

    E tem, então, outra maneira de inserir os itens que vem da minha lista no combobox? Tipo, usando um For Each?

    Grato pela sua atenção.

    Paulo Ricardo Ferreira

    segunda-feira, 22 de novembro de 2010 13:32
  • Olá PRicardo,

    Exatamente. Acho que, para poderes adicionar itens além dos items da tua lista do método ListarEmpregados, não poderás utilizar o DataSource. Ou utilizar o DataSource com uma lista alterada. Segue duas idéias:

    1) Adicionar um item avulso no combo, com string "Selecione..." e, em seguida, percorrer a lista do método ListarEmpregados com For Each, adicionando 1 a 1 dos itens:

     

    ''Considei o retorno do teu metodo ListarEmpregados como 
    ''um ArrayList; mas usei esse tipo soh para o exemplo.
    Dim lista As ArrayList = ListarEmpregados()
    ComboBox1.Items.Clear()
    ComboBox1.Items.Add("Selecione...")
    For Each empreg As Empregado In lista
      ComboBox1.Items.Add(empreg.Nome)
    Next
    ComboBox1.SelectedIndex = 0
    

     

    2) Adicionar um item avulso na lista de empregados, e então adicionar a lista ao DataSource do Combo:

     

    Dim lista As ArrayList = ListarEmpregados()
    
    ''Esse eh o item avulso na lista, com a expressao "Selecione..."
    Dim objSelec As New Empregado
    objSelec.nome = "Selecione..."
    objSelec.colaboradorID = 0
    
    lista.Insert(0, objSelec)
    ComboBox1.Items.Clear()
    ComboBox1.DataSource = lista
    ComboBox1.DisplayMember = "nome"
    ComboBox1.ValueMember = "colaboradorID"
    ComboBox1.SelectedIndex = 0
    

     

     

    No exemplo 1, tens a desvantagem de não poder usar o valueMember do combo, para obteres o ID do empregado selecionado.

    O exemplo 2 parece um pouco mais trabalhoso, mas acho que resolve o teu problema.

    Sds.,


    Daniel Ethur Porto Alegre/RS
    • Editado Daniel Ethur segunda-feira, 22 de novembro de 2010 14:28 faltou especificar o nro do exemplo no penúltimo parágrafo.
    • Marcado como Resposta PRicardo Ferreira segunda-feira, 22 de novembro de 2010 15:31
    segunda-feira, 22 de novembro de 2010 14:27
  • Caro Daniel,

    Usei a 2ª sugestão e funcionou perfeitamente.

    Muito obrigado pela dica.

    Paulo Ricardo Ferreira

    segunda-feira, 22 de novembro de 2010 15:32