none
Adicionar um item manualmente na Combobox, o outros itens vem do banco

    Question

  • Boa noite galera, como faço pra colocar uma mensagem na combobox por Exemplo "Selecione um Estado", antes d mostrar os estados, quero q quando abrir o from ele vim mostrando essa mensagem e não o primeiro UF

    segue o código d como faço pra preencher a combobox:

     public void preencherCboPerfil()
            {
                cbPerfil.DataSource = perfilBll.BuscarTodos();
                cbPerfil.DisplayMember = "PERFIL1";
                cbPerfil.ValueMember = "ID_PERFIL";
            }

    Thursday, June 21, 2012 10:05 PM

Answers

  • Opa! Agora é mais fácil.

    O erro anterior estava acontecendo porque a query ainda não havia executado na base de dados e a concatenação do item esta atrapalhando sua converção para SQL.

    Tente assim agora:

         public void preencherCboPerfil()
         {
                var fonte = perfilBll.BuscarTodos().ToList();
                fonte.Add(new PERFIL() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" });
                cbPerfil.DisplayMember = "PERFIL1";
                cbPerfil.ValueMember = "ID_PERFIL";
                cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToList();
         }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marked as answer by andy.kz Tuesday, June 26, 2012 3:56 AM
    Tuesday, June 26, 2012 3:29 AM

All replies

  • Boa Noite andy.kz

    No load() do form, você pode atribuir o valor "Selecione um Estado" na ComboBox.

    Sendo assim... Ao abrir o form o combo iniciará com este valor.

    Espero ter ajudado.

    William Henrique.

    Thursday, June 21, 2012 10:11 PM
  • olá, William

    e como eu faria, isso
    tentei add no metodo preencherCbPerfil e não consegui, como faria do jeito q tu falou

    Thursday, June 21, 2012 10:16 PM
  • comboBox.Text = "Selecione um estado";
    ou você pode colocar o primeiro estado como texto
    comboBox.selectedIndex = 0;

    Flávio Silva (Sko.Lex)
    http://www.youtube.com/user/MrSkoLex


    Se a resposta foi útil para você, marque-a como tal.
    Obrigado


    Thursday, June 21, 2012 10:21 PM
  • Olá.

    Faça assim veja se da certo por favor.

    No load()

    .....
            {
                nomeDoSeuCombo.Text = "Selecione um Estado";
            }

    Thursday, June 21, 2012 10:24 PM
  • deu certo, so o que meu problema é q seu eu deixar a mensagem e clicar em Salvar ele vai salvar como AC, só que ai eu quero q me mostre um erro, não deixe salvar
    Friday, June 22, 2012 12:15 AM
  • Quando clica em Salvar verifica qual o texto do ComboBox, se for igual a "Selecione um Estado", exibe uma mensagem e não salva, caso contrario salva

    Flávio Silva (Sko.Lex)
    http://www.youtube.com/user/MrSkoLex


    Se a resposta foi útil para você, marque-a como tal.
    Obrigado


    Friday, June 22, 2012 12:20 AM
  • Flavio, como faria isso

    no meu botão Salvar tenho o seguinte:

            private void btnSalvar_Click(object sender, EventArgs e)
            {
                bool usuarioExiste = usuarios.VerificaExistenciaUsuario(txtUsuario.Text.Trim();
    
                if (usuarioExiste)
                {
                    MessageBox.Show("Usuário já se encontra registrado!", "SEM SUCESSO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimparCampos();
                }
                else
                {
                    SalvarUsuario();
                    MessageBox.Show("Usuário Cadastrado com sucesso!", "SUCESSO", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    LimparCampos();
                }
            }

    o meu metodo Salvar()

          public void SalvarUsuario()
            {
                usuario = new USUARIO();
                usuario.ID_PERFIL = int.Parse(cbPerfil.SelectedValue.ToString());
                usuario.USUARIO1 = txtUsuario.Text;
                usuario.SENHA = txtSenha.Text;
                if (cheAtivo.Checked == true)
                {
                    usuario.ATIVO = "Ativo";
                }
                else
                {
                    usuario.ATIVO = "Inativo";
                }
    
                usuarios.Adicionar(usuario);
                usuarios.SalvarAlteracao();
    
            }

    Friday, June 22, 2012 12:32 AM
  • Andy.kz. Se deu certo e vc conseguiu colocar o "Selecione um Estado" em primeiro. Faça a verificação quando vc clicar no botão algo como:

    button_click(xxxxxxxxxxxxxxxx)
    {
       if(comboBox.SelectedItem.ToString() == "Selecione um Estado"
       {
         MessageBox.Show("Selecione um Estado");
         return;
       }
       else
       {
         //Código de sucesso.
       }
    }

    Algo bem parecido com o código de cima. Abraços


    Atenciosamente, Guilherme. Caso esta resposta foi útil para seu problema, por favor, marque como mesma. Caso ela apenas responda sua pergunta corretamente, não esqueça de marca-lá.

    Friday, June 22, 2012 11:08 AM
  • Andy, na realidade, não é bom fazer um if comparando com o texto do comboBox porque o usuário pode alterar esse texto, sendo assim, se o usuário alterar o texto, o if não funcionará.

    O melhor a se fazer é verifica o índice selecionado:

    if (comboBox1.SelectedIndex < 0)
                { MessageBox.Show("Selecione um estado"); return; }

    Você pode colocar este código antes de tudo, assim:

    private void btnSalvar_Click(object sender, EventArgs e) {
    if(comboBox1.SelectedIndex < 0)
    { MessageBox.Show("Selecione um estado"); return; }

    bool usuarioExiste = usuarios.VerificaExistenciaUsuario(txtUsuario.Text.Trim(); . . . }



    Flávio Silva (Sko.Lex)
    http://www.youtube.com/user/MrSkoLex


    Se a resposta foi útil para você, marque-a como tal.
    Obrigado


    Friday, June 22, 2012 11:36 AM
  • tenta assim:

     public void preencherCboPerfil()
            {
                cbPerfil.DataSource = perfilBll.BuscarTodos();
                cbPerfil.DisplayMember = "PERFIL1";
                cbPerfil.ValueMember = "ID_PERFIL";
                cbPerfil.Items.Insert(0, "Selecione um Perfil");
            }

    Friday, June 22, 2012 2:57 PM
  • Olá Diego, desse jeito ja tinha testando e não da certo
    Friday, June 22, 2012 4:20 PM
  • Olá Flavio, blz?

    tentei fazer do jeito q você disse o que me acontece é o seguinte:

    se eu entrar no combox e não selecionar nd e deixar selecionado o texto "Selecione um Estado", aí me mostra a Message, agora se eu abri o form e preencher os outros dados e nem entrar no combobox ele salva como "AC"


    • Edited by andy.kz Friday, June 22, 2012 4:28 PM
    Friday, June 22, 2012 4:21 PM
  • @andy

    Eu estou aseguir este thread, vejo que esta a crecer bastante. diz-me uma coisa:

    se voce nao seleciona, porque grava com "AC"?


    O Amor que Sinto por Ti, Apenas Deus e capaz de sentir e superar tal amor!

    Friday, June 22, 2012 9:17 PM
  • Olá Malange, pois não sei porque, segue os codigos de como eu faço pra preencher o combobox e como coloquei a massagem que eu queria, so sei q esta dando esse erro, o porque eu não sei,

      public void preencherCboPerfil()
            {
                cbPerfil.DataSource = perfilBll.BuscarTodos();
                cbPerfil.DisplayMember = "PERFIL1";
                cbPerfil.ValueMember = "ID_PERFIL";
                cbPerfil.Text = "Selecione um Estado";
                cbPerfil.SelectedIndex = 0;
            }

    tenho um metodo Salvar(), nesse metodo eu passo assim pra salvar no banco

     usuario.ID_ESTADO = int.Parse(cbPerfil.SelectedValue.ToString());


    • Edited by andy.kz Friday, June 22, 2012 9:43 PM
    Friday, June 22, 2012 9:41 PM
  • Nao pode ser selectedvalue mais sim : comboBox2.SelectedItem.ToString();

    O Amor que Sinto por Ti, Apenas Deus e capaz de sentir e superar tal amor!

    Friday, June 22, 2012 9:48 PM
  • Malange,

    usuario.ID_ESTADO = int.Parse(cbPerfil.SelectedItem.ToString());

    mudei pra assim so que dá esse erro, 

    Input string was not in a correct format.

    Friday, June 22, 2012 9:56 PM
  • retira o int.parse e veja o que acontece ou remove o tostring()


    O Amor que Sinto por Ti, Apenas Deus e capaz de sentir e superar tal amor!

    Friday, June 22, 2012 9:57 PM
  • Malange,

    se eu retiro o int.parse
    Cannot implicity convert type string to int

    se eu retiro o tostring()

    Argument 1: cannot convert from object to string

    The best method match for int.Parse(string) has some invalid arguments

    Friday, June 22, 2012 10:01 PM
  • Desculpa, eu estou com sono ja e bastante tarde aki na englaterra ja nao estou a ler bem, este erro:

    Input string was not in a correct format. e proque o formato esta errado ou esta vazio a tua combobox, tens de selecionar algo.

    a outra questao seria, se voce tiver nuemros no teu combobox entao vais ter de seleciobar um valor. 

     cbPerfil.ValueMember = "ID_PERFIL";


    O Amor que Sinto por Ti, Apenas Deus e capaz de sentir e superar tal amor!

    Friday, June 22, 2012 10:15 PM
  • como ficou este thrad?


    O Amor que Sinto por Ti, Apenas Deus e capaz de sentir e superar tal amor!

    Saturday, June 23, 2012 7:46 PM
  • Malange, sem resolução

    pois não consegui resolver o problema ainda

    Monday, June 25, 2012 6:40 PM
  • Olá Andy,
    Tudo beleza?

    Veja se o código abaixo ajuda:

    public void preencherCboPerfil()
    {
    	var fonte = perfilBll.BuscarTodos();
    	fonte = fonte.Concat(new Perfil[] { new Perfil() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" } });
    
    	cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL);
    	cbPerfil.DisplayMember = "PERFIL1";
    	cbPerfil.ValueMember = "ID_PERFIL";
    cbPerfil.DataBind();
    }

    Amigo, quando for validar, verifique se a propriedade SelectedItemValue é igual a -1.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil


    Tuesday, June 26, 2012 2:14 AM
  • Olá Fernando,

    não consegui passar essa ultima linha

    cbPerfil.DataBind();

    Tuesday, June 26, 2012 2:21 AM
  • Pode remove-la então.

    Pensei que era uma app com ASP.Net :)

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 2:22 AM
  • Fernando, ok removi e testei, não me mostra nada no ComboBox, fica vazia

    Tuesday, June 26, 2012 2:24 AM
  • Olá Andy,

    Manda ver que agora vai!

    var fonte = GetAll();
    
    fonte = fonte.Concat(new Perfil[] { new Perfil() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" } });
    
    cbPerfil.DisplayMember = "PERFIL1";
    cbPerfil.ValueMember = "ID_PERFIL";
    cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToArray();

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 2:30 AM
  • Olá Fernando,

    ali aonde tu passou GetAll(), não consegui passar, não seria 

     var fonte = perfilBll.BuscarTodos();

    se sim não deu certo pois da erro na linha

    cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToArray();

    Tuesday, June 26, 2012 2:38 AM
  • Sim, na verdade o GetAll é o nome do método que construi para os meus testes.

    Qual o erro que lhe surge?

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 2:43 AM
  • Fernando,

    cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToArray();

    o DataSource esta como null

    Tuesday, June 26, 2012 2:47 AM
  • Olá Andy,

    Estranha essa mensagem de erro... parece que não estão vindo dados da base, ou alguma propriedade esta nula...

    Tente assim:

    var fonte = perfilBll.BuscarTodos();
    
    if (fonte.Count() > 0)
    {
    	fonte = fonte.Concat(new Perfil[] { new Perfil() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" } });
    
    	cbPerfil.DisplayMember = "PERFIL1";
    	cbPerfil.ValueMember = "ID_PERFIL";
    	cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToArray();
    }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 2:53 AM
  • Fernando, estranho mesmo

    meu codigo esta certinho conforme vc passou aqui, mais ainda sem sucesso, mesma problema ainda o DataSource = null

            public void preencherCboPerfil()
            {
                var fonte = perfilBll.BuscarTodos();
                if (fonte.Count() > 0)
                {
                    fonte = fonte.Concat(new PERFIL[] { new PERFIL() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" } });
                    cbPerfil.DisplayMember = "PERFIL1";
                    cbPerfil.ValueMember = "ID_PERFIL";
                    cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToList();
                }
                //cbPerfil.Text = "Selecione um Perfil";
                //cbPerfil.SelectedIndex = 0;
            }

    Tuesday, June 26, 2012 2:59 AM
  • Tente fazer assim:

         public void preencherCboPerfil()
            {
                var fonte = perfilBll.BuscarTodos();
                if (fonte.Count() > 0)
                {
                    fonte = fonte.Concat(new PERFIL[] { new PERFIL() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" } });
                    cbPerfil.DisplayMember = "PERFIL1";
                    cbPerfil.ValueMember = "ID_PERFIL";
                    cbPerfil.DataSource = fonte.ToList();
                }
                //cbPerfil.Text = "Selecione um Perfil";
                //cbPerfil.SelectedIndex = 0;
            }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 3:01 AM
  • Fernando, 

    mesmo problema ainda, DataSource = null

    olha o erro que mostra tanto faz a forma q passa

     cbPerfil.DataSource = fonte.ToList();
     cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToList();

    passando de qulq jeito mostra esse erro: 

    Unable to create a constant value of type 'Empregabilidade_FAE.DAO.PERFIL'. Only primitive types ('such as Int32, String, and Guid') are supported in this context.

    Tuesday, June 26, 2012 3:10 AM
  • Olá Andy,

    Acho que saquei o problema...

    Veja assim:

         public void preencherCboPerfil()
         {
                var fonte = perfilBll.BuscarTodos().ToList();
                fonte.Add(new PERFIL() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" });
                cbPerfil.DisplayMember = "PERFIL1";
                cbPerfil.ValueMember = "ID_PERFIL";
                cbPerfil.DataSource = fonte;
         }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 3:15 AM
  • Olá Fernando,

    agora mostrou no ComboBox, mais ficou da seguinte maneira:
    Administrador

    Usuario

    Selecione um Perfil

    Na ComboBox ja venho com o Administrador selecionado

    Tuesday, June 26, 2012 3:25 AM
  • Opa! Agora é mais fácil.

    O erro anterior estava acontecendo porque a query ainda não havia executado na base de dados e a concatenação do item esta atrapalhando sua converção para SQL.

    Tente assim agora:

         public void preencherCboPerfil()
         {
                var fonte = perfilBll.BuscarTodos().ToList();
                fonte.Add(new PERFIL() { ID_PERFIL = -1, PERFIL1 = "Selecione um Perfil" });
                cbPerfil.DisplayMember = "PERFIL1";
                cbPerfil.ValueMember = "ID_PERFIL";
                cbPerfil.DataSource = fonte.OrderBy(p => p.ID_PERFIL).ToList();
         }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    • Marked as answer by andy.kz Tuesday, June 26, 2012 3:56 AM
    Tuesday, June 26, 2012 3:29 AM
  • Olá Fernando,

    agora deu certinho, 

    quando for validar, verifico se a propriedade SelectedItemValue é igual a -1?

    Tuesday, June 26, 2012 3:36 AM
  • Olá Andy,

    Exatamente. Faça desta forma, pois o item Fake que estamos criando esta assim ;)

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 3:37 AM
  • Olá, Fernando

    antes eu tinha dessa forma para validar se eu entrava no combobox mais deixa a mensagem selecionada:

           private void cbPerfil_Validating(object sender, CancelEventArgs e)
            {
                if (cbPerfil.SelectedIndex < 0)
                {
                    errorProvider1.SetError(cbPerfil, "Por Favor! Selecione um Perfil");
                }
                else
                {
                    errorProvider1.SetError(cbPerfil, "");
                }
            }
    só que agora não dá mais, e no lugar do SelectedIndex tentei colocar o SelectedItemValue mais não tem essa opção

    Tuesday, June 26, 2012 3:44 AM
  • Olá Andy,

    Vc tem razão. A mto não mexo com Windows Forms, e acabo confundindo com as properties do ASP.Net.

    Utilize então a property SelectedValue, assim como no exemplo abaixo, veja que ele retorna um Object e o cast para um tipo inteiro é necessário:

    if (Convert.ToInt32(this.cbPerfil.SelectedValue) < 0)
    {
       MessageBox.Show("Sebo nas canelas!");
    }

    []s!

    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 3:48 AM
  • Olá Fernando,

    Valeu amigo pela ajudas e pela paciência, deu certinho

    Tuesday, June 26, 2012 3:56 AM
  • Não precisa agradecer :)
    Estamos juntos nessa!

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 3:57 AM
  • @Fernando

    Tu tens mesmo paciencia. Tenho de aprender contigo esta arte e virtude.

    Obrigado por teres selecionado este problema.


    http://malange-levi.blogspot.co.uk/

    Tuesday, June 26, 2012 10:33 PM
  • Meu amigo Malange,

    É sempre um prazer ajudar.

    Tomei muitos puxões de orelha no começo e mesmo hoje ainda tomo alguns, mas não acho justo isso.

    O que quero realmente é ajudar a galera que esta começando.

    []s!


    Fernando Henrique Inocêncio Borba Ferreira
    while(alive){ this.WriteCode(); }
    Blog: http://ferhenriquef.com/
    Twitter: @ferhenrique
    Entity Framework - Brasil: https://www.facebook.com/EntityFrameworkBrasil

    Tuesday, June 26, 2012 11:20 PM