none
Como diferenciar dois ou mais nomes iguais em uma listBox RRS feed

  • Pergunta

  • Ai galera, eu uso o seguinte codigo pra preencher minhas listBox

    public void MostrarDados()
            {
               try
               {
                    string Conexao;
                    Conexao = ConfigurationManager.ConnectionStrings["LanConnectionString"].ConnectionString;
                    SqlConnection sqlConexao = new SqlConnection(Conexao);
                    SqlCommand cmd = new SqlCommand("SELECT Codigo_Cliente, Nome FROM Clientes", sqlConexao);
                    sqlConexao.Open();
                    SqlDataReader leitor = cmd.ExecuteReader();
                    
                    listBox1.Items.Clear();
                    while (leitor.Read())
                    {
                        
                        listBox1.Items.Add(leitor["Nome"]);
                        
                    }
         
               }
               catch (Exception erro)
               {
                    MessageBox.Show("Algo inesperado ocorreu!", "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

    Nesta listBox fica os nomes de todos os clientes cadastrados ai quando eu clico em algum nome faz uma pesquisa no banco de dados com o nome clicado e me retorna todos os dados referentes aquele cliente, mas quando tem dois ou mais nomes iguais na list a minha pesquisa ñ consegui diferenciar e acaba retornando os dados referente a o ultimo que foi cadastrado com aquele msm nome. Será que alguem ai pode me ajudar, ficarei mto grato!

    Obrigado e paz a todos!

    Obs: Eu sei q tem como fazer com DataSource, mas da erro na minha consulta, e tbm ñ consigo limpar a list!

    • Editado Iam Medeiros quarta-feira, 20 de março de 2013 01:36
    quarta-feira, 20 de março de 2013 01:31

Respostas

  • Olá,

    A busca no banco deve ser feita sempre por um identificador, para evitar o problema que você relatou.

    Para resolver você deve inserir no listbox os itens com seus respectivos identificadores.

    Por exemplo:

        struct Pessoa 
        {
            public int ID { get; set; }
            public string Nome { get; set; }
        }
    
        public partial class Form1 : Form
        {
           
            private void Form1_Load(object sender, EventArgs e)
            {
                listBox1.Items.Add(new Pessoa { ID = 1, Nome = "José" });
                listBox1.Items.Add(new Pessoa { ID = 2, Nome = "Maria" });
                listBox1.Items.Add(new Pessoa { ID = 3, Nome = "José" });
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                int ID = ((Pessoa)listBox1.SelectedItem).ID;
               
            }
        }

    Note que eu inserí no listbox elementos do tipo pessoa que é uma struct que criei. Para resgatar o código do item selecionado utilize a sintaxe que coloquei no clique do botão. Com o código em mãos é só fazer a consulta no banco e buscar os dados que você quer.

    Mais um detalhe, você deve alterar o valor de duas propriedades do ListBox: ValueMember = ID e DisplayMember = Nome. Isso vai fazer com que o listbox mostre o nome da pessoa, mas quando o valor for resgatado ele irá pegar o ID.

     
    • Sugerido como Resposta Leonardo.Garcia quarta-feira, 20 de março de 2013 04:09
    • Marcado como Resposta Felipo Gonçalves quarta-feira, 20 de março de 2013 17:29
    quarta-feira, 20 de março de 2013 02:08

Todas as Respostas

  • Olá,

    A busca no banco deve ser feita sempre por um identificador, para evitar o problema que você relatou.

    Para resolver você deve inserir no listbox os itens com seus respectivos identificadores.

    Por exemplo:

        struct Pessoa 
        {
            public int ID { get; set; }
            public string Nome { get; set; }
        }
    
        public partial class Form1 : Form
        {
           
            private void Form1_Load(object sender, EventArgs e)
            {
                listBox1.Items.Add(new Pessoa { ID = 1, Nome = "José" });
                listBox1.Items.Add(new Pessoa { ID = 2, Nome = "Maria" });
                listBox1.Items.Add(new Pessoa { ID = 3, Nome = "José" });
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                int ID = ((Pessoa)listBox1.SelectedItem).ID;
               
            }
        }

    Note que eu inserí no listbox elementos do tipo pessoa que é uma struct que criei. Para resgatar o código do item selecionado utilize a sintaxe que coloquei no clique do botão. Com o código em mãos é só fazer a consulta no banco e buscar os dados que você quer.

    Mais um detalhe, você deve alterar o valor de duas propriedades do ListBox: ValueMember = ID e DisplayMember = Nome. Isso vai fazer com que o listbox mostre o nome da pessoa, mas quando o valor for resgatado ele irá pegar o ID.

     
    • Sugerido como Resposta Leonardo.Garcia quarta-feira, 20 de março de 2013 04:09
    • Marcado como Resposta Felipo Gonçalves quarta-feira, 20 de março de 2013 17:29
    quarta-feira, 20 de março de 2013 02:08
  • Mano mto abrigado, vc ñ sabe o quanto sou grato pela sua ajuda, eu ja ñ sabia mais oq fazer, e desculpe a ignorância, é q sou novo em C#!
    quarta-feira, 20 de março de 2013 18:48