none
COMBOBOX - VALUEMEMBER RRS feed

  • Pergunta

  • Bom dia

    Tenho 02 forms (formClientes e formManutencaoClientes, resumo abaixo)
    onde no primeiro tem um datagrid onde passo valores por parâmetro para
    o segundo form, O caso é que não estou conseguindo passar o valor do sexo
    1=Masculino e 2=Feminino, que populo numa combobox, ou seja o Display pelo nome e o Value pelo código
    Não sei o que estou fazendo de errado, pois ao consultar na tabela onde deveria
    aparecer o valor aparece o nome

    Ele pegar o valor no primeiro fomr (1 ou 2) mas no segundo form registra o retorno
    como Null

    Grato

    Dilson

     

     

    *********************************************************************************
    public partial class formClientes : Form
        {
            bancoClientes banco = new bancoClientes();
            public formClientes()
            {

                InitializeComponent();
            }

        
          
          
            private void dgvRegistros_CellClick(object sender, DataGridViewCellEventArgs e)
            {
                try
                {
                    if (dgvRegistros.CurrentRow.Index != -1)
                    {
                        //Passando para o form Manutenção Clientes o conteúdo de cada célula do Datagrid
                        formManutencaoClientes frm = new formManutencaoClientes();
                        frm.Valsexo = Convert.ToString(dgvRegistros.Rows[dgvRegistros.CurrentRow.Index].Cells[3].Value);
                        frm.ShowDialog();
                    }
                }
                catch (Exception erro)
                {
                    MessageBox.Show("Erro\n" + erro.Message, "Proposta");
                }
            }

    *********************************************************************************

        public partial class formManutencaoClientes : Form
        {
            public string Valsexo;

            public string codSexo
            {
                get { return Valsexo.ToString(); }
            }

            
                           
            private void formManutencaoClientes_Load(object sender, EventArgs e)
            {
                try
                {
                    formClientes consulta = new formClientes();
                    comboSexo.SelectedValue = Valsexo.ToString();
                  
                    //POPULANDO O COMBO DO SEXO
                    SqlConnection conexao = new SqlConnection(@"server=.\sqlexpress;Database = meubanco; Integrated Security = SSPI");
                    SqlDataAdapter sql = new SqlDataAdapter("select nomeSexo from sexo", conexao);
                    DataTable dt = new DataTable();
                    sql.Fill(dt);
                   
                    try
                    {
                       
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            comboSexo.Items.Add(dt.Rows[i]["nomeSexo"]);
                            comboSexo.DisplayMember = "nomeSexo"; //O que será exibido para o cliente
                            comboSexo.ValueMember = "codSexo"; // O que será armazenado de fator
                            comboSexo.SelectedIndex = 0; //para selecionar o primeiro item da lista
                           
                        }

                    }
                    catch (Exception erro)
                    {

                        MessageBox.Show("Erro\n" + erro.Message, "Proposta");
                    }

                           

            }

     

     

    terça-feira, 13 de novembro de 2012 12:01

Todas as Respostas

  • retire este: comboSexo.SelectedIndex = 0; //para selecionar o primeiro item da lista

    quando estiver populando o combobox, não tem necessidade.

    Porém eu acho que você deveria criar uma classe do tipo "Sexo", nesta classe você coloca 2 atributos com propriedade, "cod" e "sexo". Esta classe seria adicionada ao "DataSource" de seu ComboBox. Depois disso você pode setar pela janela de "Properties" de seu ComboBox o "DataMember" e o "DisplayMember" com os atributos criados na classe "Sexo".

    E então você apenas faria algo parecido com isso em seu "for":

    Sexo sexo = new Sexo();
    sexo.cod = dt.Rows[i]["codSexo"];
    sexo.sexo = dt.Rows[i]["nomeSexo"];
    
    comboSexo.Items.Add(sexo);


    Giuvane Conti - Se a resposta for útil, marque-a.

    quarta-feira, 14 de novembro de 2012 12:51
  • Amigo, o seu select está errado. Veja que voce busca somente o nomeSexo e não busca o codSexo.

    //mude para 
    SqlDataAdapter sql = new SqlDataAdapter("select nomeSexo, codSexo from sexo", conexao);

    Voce também deve tirar o código do começo pois não serve para nada

    formClientes consulta = new formClientes();
                    comboSexo.SelectedValue = Valsexo.ToString();

    Se ajudou não esqueça de marcar ;)
    quinta-feira, 29 de novembro de 2012 18:40