none
Problema con listbox selected item RRS feed

  • Domanda

  • Avrei bisogno di visualizzare i dati selezionati da una listbox in una serie di textbox utilizzando un database sql.

    Sono riuscito a fare un elenco nella listbox ma come posso passare i dati nelle textbox?

    questo è il codice:

                                           

    SqlConnection conn = new SqlConnection("Data Source=ANDREAPC\\SQLEXPRESS;Initial Catalog=eolo;Integrated Security=True;Pooling=False");
                SqlCommand cmd = new SqlCommand("SELECT * FROM ClientiFornitori", conn);

                try{
                    conn.Open();
                    SqlDataReader reader = cmd.ExecuteReader();
                    while(reader.Read())
                    {
                        string nome = reader.GetString(1);
                        string cognome = reader.GetString(2);

                        clientiListBox.Items.Add(nome);

                    }
                    reader.Close();

                }
                catch(Exception e)
                {
                    MessageBox.Show("Problemi:   "+ e);
                }

                string name = (string)clientiListBox.SelectedItem;
                SqlCommand command = new SqlCommand("SELECT * FROM ClientiFornitori WHERE nome='"+name+"'", conn);


                SqlDataReader rd = command.ExecuteReader();
                while (rd.Read())
                {
                    nomeText.Text = rd.GetString(1);
                    cognomeText.Text = rd.GetString(2);
                    indirizzoText.Text = rd.GetString(3);
                    emailText.Text = rd.GetString(4);
                    datanText.Text = rd.GetString(5);
                    tipo.Text = rd.GetString(6);
                    noteText.Text = rd.GetString(7);
                }

    Grazie in anticipo, Andrea

    domenica 21 settembre 2014 09:35

Risposte

  • Ciao Andrea, 
    ho capito cosa vuoi ottenere.
    La seconda query la devi effettuare nell'evento listBox1_SelectionChanged
    in modo da popolare le varie TextBox ad ogni cambio di item del ListBox.
    Quindi l'evento sarà così:
    private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                SqlConnection conn = new SqlConnection("Data Source=ANDREAPC\\SQLEXPRESS;Initial Catalog=eolo;Integrated Security=True;Pooling=False");
    
    
                string name = (string)clientiListBox.SelectedItem;
                SqlCommand command = new SqlCommand("SELECT * FROM ClientiFornitori WHERE nome=@Name", conn);
                command.Parameters.AddWithValue("@Name", name);
    
                SqlDataReader rd = command.ExecuteReader();
                while (rd.Read())
                {
                    nomeText.Text = rd.GetString(1);
                    cognomeText.Text = rd.GetString(2);
                    indirizzoText.Text = rd.GetString(3);
                    emailText.Text = rd.GetString(4);
                    datanText.Text = rd.GetString(5);
                    tipo.Text = rd.GetString(6);
                    noteText.Text = rd.GetString(7);
                }
    
            }

    Spero di aver capito bene il tuo problema, 
    ciao

    Paolo Pranzo

    • Contrassegnato come risposta Andrea Molteni domenica 21 settembre 2014 12:41
    domenica 21 settembre 2014 10:45

Tutte le risposte

  • Ciao Andrea,
    potresti utilizzare l'evento SelectionChanged del controllo ListBox,

    ad esempio:
    void SslectionChanged(object sender, SelectionChangedEventArgs args)
    {
        ListBoxItem lbi = ((sender as ListBox).SelectedItem as ListBoxItem);
        tb.Text = lbi.Content.ToString();
    }

    Ciao

    Paolo Pranzo

    domenica 21 settembre 2014 09:49
  • Ok grazie, ma come lo uso nel mio esempio? 

    Cioè ho bisogno nella seconda query un dato della listbox come faccio?

    Grazie

    Andrea Molteni

    domenica 21 settembre 2014 10:19
  • Ciao Andrea,

    Ok grazie, ma come lo uso nel mio esempio? 

    Cioè ho bisogno nella seconda query un dato della listbox come faccio?

    Grazie

    Andrea Molteni

    cosa accade nella seconda query? hai errori ? il valore che hai scelto dalla listbox non è corretto ?

    Ciao.


    domenica 21 settembre 2014 10:24
  • Stai utilizzando WPF o WinForms?
    Se usi WPF ti basta aggiungere al controllo ListBox SelectionChanged="listBox1_SelectionChanged".
    Se nella TextBox vuoi visualizzare solo il nome dell'item selezionato non c'è bisogno di fare una seconda query,
    prendi il nome direttamente dal listbox così:
    void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs args)
    {
        ListBoxItem lbi = ((sender as ListBox).SelectedItem as ListBoxItem);
        tb.Text = lbi.Content.ToString();
    }

    Ciao

    Paolo Pranzo

    domenica 21 settembre 2014 10:27
  • Ciao Andrea, 
    ho capito cosa vuoi ottenere.
    La seconda query la devi effettuare nell'evento listBox1_SelectionChanged
    in modo da popolare le varie TextBox ad ogni cambio di item del ListBox.
    Quindi l'evento sarà così:
    private void listBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
            {
                SqlConnection conn = new SqlConnection("Data Source=ANDREAPC\\SQLEXPRESS;Initial Catalog=eolo;Integrated Security=True;Pooling=False");
    
    
                string name = (string)clientiListBox.SelectedItem;
                SqlCommand command = new SqlCommand("SELECT * FROM ClientiFornitori WHERE nome=@Name", conn);
                command.Parameters.AddWithValue("@Name", name);
    
                SqlDataReader rd = command.ExecuteReader();
                while (rd.Read())
                {
                    nomeText.Text = rd.GetString(1);
                    cognomeText.Text = rd.GetString(2);
                    indirizzoText.Text = rd.GetString(3);
                    emailText.Text = rd.GetString(4);
                    datanText.Text = rd.GetString(5);
                    tipo.Text = rd.GetString(6);
                    noteText.Text = rd.GetString(7);
                }
    
            }

    Spero di aver capito bene il tuo problema, 
    ciao

    Paolo Pranzo

    • Contrassegnato come risposta Andrea Molteni domenica 21 settembre 2014 12:41
    domenica 21 settembre 2014 10:45