none
Combobox 2 a missão RRS feed

  • Pergunta

  • muito bem srs, achei que tinha acertado minha vida com os combobox mas eis que ele retorna, seguinte:

    no windows forms, C#, SQL, faço o preenchimento do combo pelo design, defino o valuemember como o idPredio, e displaymember como nomePredio, da tabela predio. Perfeito. Seleciono o tal do predio e jogo no banco na tabela 2, que tem a foreignkey do predio, passando o nomePredio e o seu id. Perfeito. Quero editar essa tabela 2, passando os dados do grid, que vem da tabela 2, para os textbox, aí o combo pega no meu pé...

    estou passando o valor do grid para o combo da seguinte maneira:

    cbPredio.SelectedText = Convert.ToString(dr["nomePredio"]);

    enquanto eu estava fazendo sem o idPredio, tudo perfeito, mas agora que estou registrando o id, tenho recebido um erro, pq dizendo que o cbpredio recebe o selectedText não significa que está sendo selecionado no combo, e o id não vai junto, daí recebo erro de id null.

    Como eu faço pra que o combo entenda que estou passando um valor de seleção para que ele me devolva o id junto? tem alguma outra forma de receber o id?

    já fiz, selectedtext, selecteditem, selectedvalue(que daí é o id e dá exceção)...preciso passar o valor do grid pro combo como se fosse um seleção do usuário no combo....

    Grato

    segunda-feira, 6 de fevereiro de 2017 13:47

Respostas

  • Tracaja, boa tarde.

    Cara, fiz um modelo aqui, deve funcionar ai.

    public class Modelo
        {
            public string NomePredio { get; set; }
            public int id_predio { get; set; }
        }
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                List<Modelo> predios = new List<Modelo>()
                    {
                         new Modelo { id_predio = 1 , NomePredio = "predio 1" },
                         new Modelo {id_predio = 2 , NomePredio = "predio 2"  }
                    };
    
    
                comboBox1.DataSource = predios;
                comboBox1.DisplayMember = "NomePredio";
                comboBox1.ValueMember = "id_predio";
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(comboBox1.SelectedValue.ToString());
            }


    Diego Almeida Barreto&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    • Marcado como Resposta tracaja segunda-feira, 6 de fevereiro de 2017 18:11
    segunda-feira, 6 de fevereiro de 2017 14:19
  • será que resolve se eu fizer um if no update:

    se id =null recebe o valor que já está no grid, senão é pq mudou o prédio e aí recebe o valuemember.... vou tentar, mas esperava ter um jeito mais fácil....que era o que estava tentando, fazer o combo entender que estou passando uma seleção pra ele e não um text....

    • Marcado como Resposta tracaja segunda-feira, 6 de fevereiro de 2017 18:11
    segunda-feira, 6 de fevereiro de 2017 15:36

Todas as Respostas

  • O ValueMember está configurado corretamente (visto que é uma string, veja se não há erros de digitação)?

    Verifique se o SelectedValue/SelectedText é executado após o ComboBox já ter sido preenchido.

    Verifique também se o DataReader está retornando valores esperados.


    If you found this post helpful, please "Vote as Helpful". If it actually answered your question, remember to "Mark as Answer".

    Se achou este post útil, por favor clique em "Votar como útil". Se por acaso respondeu sua dúvida, lembre de "Marcar como Resposta".

    segunda-feira, 6 de fevereiro de 2017 14:01
  • Tracaja, boa tarde.

    Cara, fiz um modelo aqui, deve funcionar ai.

    public class Modelo
        {
            public string NomePredio { get; set; }
            public int id_predio { get; set; }
        }
    
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
    
                List<Modelo> predios = new List<Modelo>()
                    {
                         new Modelo { id_predio = 1 , NomePredio = "predio 1" },
                         new Modelo {id_predio = 2 , NomePredio = "predio 2"  }
                    };
    
    
                comboBox1.DataSource = predios;
                comboBox1.DisplayMember = "NomePredio";
                comboBox1.ValueMember = "id_predio";
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                MessageBox.Show(comboBox1.SelectedValue.ToString());
            }


    Diego Almeida Barreto&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    • Marcado como Resposta tracaja segunda-feira, 6 de fevereiro de 2017 18:11
    segunda-feira, 6 de fevereiro de 2017 14:19
  • então, eu verifiquei, o problema é qdo eu dou o update, fica como se o combobox não tivesse sido selecionado....
    segunda-feira, 6 de fevereiro de 2017 15:03
  • isso funciona, mas preencho o combo pelo binding, aí eu jogo do grid pra ele, mas qdo eu dou o update na tabela ele dá erro pq fica como se o combo nao tivesse sido selecionado, e o id fica null....

    pra preencher o combo eu faço um select da tabela predio:

                    this.cbPredio.DataSource = table;
                    this.cbPredio.ValueMember = "idPredio";
                    this.cbPredio.DisplayMember = "nomePredio";

    na verdade eu falei errado, passo os valores do datareader pros textbox, por um select:

                        cbPredio.SelectedText = (dr["nomePredio"].ToString());

    o nome do predio aparece lá no combo.

    aí vou dar o update:

                    SqlCommand cmd = new SqlCommand(@" UPDATE colaborador SET 

                           nomePredio=@nomePredio, idPredio=@idPredio where idCol=@idCol, con)

                    cmd.Parameters.AddWithValue("@nomePredio", cbPredio.Text);
                    cmd.Parameters.AddWithValue("@idPredio", cbPredio.SelectedValue);

    é aqui que não estou sabendo passar o parametro, se eu alterar o predio pelo combo ele faz o update certinho, mas se somente alterar outros dados ele não faz.... acho que tenho que fazer um if, pra definir o itemselected index = ao texto .... pra ficar como se tivesse sido selecionado....não sei....

    segunda-feira, 6 de fevereiro de 2017 15:17
  • será que resolve se eu fizer um if no update:

    se id =null recebe o valor que já está no grid, senão é pq mudou o prédio e aí recebe o valuemember.... vou tentar, mas esperava ter um jeito mais fácil....que era o que estava tentando, fazer o combo entender que estou passando uma seleção pra ele e não um text....

    • Marcado como Resposta tracaja segunda-feira, 6 de fevereiro de 2017 18:11
    segunda-feira, 6 de fevereiro de 2017 15:36
  • posta o erro ai

    Diego Almeida Barreto&lt;/strong&gt; &lt;br/&gt; &lt;em&gt;System Analyst / Software Developer&lt;/em&gt; &lt;br/&gt; &lt;img &lt;/p&gt; &lt;/div&gt;

    segunda-feira, 6 de fevereiro de 2017 17:29
  •              Era isso mesmo, deu certo ó, fiz assim:

                    if(cbPredio.SelectedValue == null)
                    {
                     cmd.Parameters.AddWithValue("@idPredio", dgvCol.CurrentRow.Cells["idPredioGrid"].Value);
                    }
                    else
                    {
                        cmd.Parameters.AddWithValue("@idPredio", cbPredio.SelectedValue);
                    }

    O erro só respondia como falha de alteração, pq eu não sei fazer os tratamentos direito, mas identifiquei o que era....

    Agora funcionou perfeito, engraçado que qdo agente expõe a dúvida pra um terceiro parece que fica mais fácil responder....

    Mas ainda acho que deve ter um jeito de passar o valor pro combo como se fosse uma seleção sem ter que fazer isso que eu fiz, pra ele entender que deve selecionar o parâmetro pelo texto informado...no momento o importante é que funcione corretamente pq tenho que apresentar isso funcionando semana que vem...kkkkk.

    Vou marcar como resposta pq me ajudou a resolver no fim das contas, valeu!!

    Vou continuar pesquisando uma forma de devolver um selected pro combo...se souber alguma outra forma, posta aí por favor que eu testo, tô sempre aqui....24 horas essa semana praticamente....

    Obrigado!

    segunda-feira, 6 de fevereiro de 2017 18:10