Listbox Selectitems

venerdì 26 settembre 2008 - 11.30

Lucifel Profilo | Junior Member

Ciao a tutti,
ho una listbox con associata una datatable (con 2 campi - id, descrizione), dove Id è il value member e la descrizione il display member.
Devo permettere all'utente la selezione multipla.

All'evento click di un bottone devo estrarre tutti gli id delle righe della listbox selezionata e farci delle operazioni.
Mi sono bloccato nello selezionare gli elementi della listbox.

L'msdn non dà esempi se non esempi semplicissimi: ad esempio lb.SelectItems.Count o roba simile.

Qualcuno mi sa aiutare?
Grazie

Diego
***
Mignolo, stai ponderando quello che sto ponderando io?
Credo di sì Prof, ma se i nani fossero stati otto, si sarebbe chiamata... 'Biancaneve e gli otto nani'
***

Brainkiller Profilo | Guru

Ciao,
allora partiamo da una Form con una ListBox sopra chiamata listBox1 e con abilitata la selezione multipla.
Mi sono creato una classe per simulare i record di un dataset:

public class Elemento { public string Name { get; set; } public string ID { get; set; } public Elemento(string name,string id) { this.Name = name; this.ID = id; } }

al Load della Form popolo la listbox con degli elementi:

private void Form1_Load(object sender, EventArgs e) { List<Elemento> t = new List<Elemento>(); t.Add(new Elemento("David", "1")); t.Add(new Elemento("Paolo", "2")); t.Add(new Elemento("Mario", "3")); listBox1.DisplayMember = "Name"; listBox1.ValueMember = "ID"; listBox1.DataSource = t; }

Con un Button elenco gli elementi selezionati:

for (int i = 0; i < listBox1.SelectedItems.Count; i++) { Elemento temp = (Elemento)listBox1.SelectedItems[i]; Console.WriteLine(String.Format("Name: {0} ID: {1}", temp.Name, temp.ID)); }

L'output sarà analogo al seguente:

Name: David ID: 1 Name: Paolo ID: 2 Name: Mario ID: 3

Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/

Lucifel Profilo | Junior Member

Grazie infinite.
Purtroppo non posso utilizzare la tua soluzione perché in vb .net 2003 non funzionano i dataset tipizzati (quelli che fai come: <Elemento>)

La soluzione (temporanea) che ho usato io è questa:
For Each dr As DataRowView In ListBox1.SelectedItems Dim id As Integer = Convert.ToInt32(dr.Item("Id")) Dim desc as String = Convert.ToString(dr.Item("Description")) [Sequenza di operazioni] Next
Non che la cosa mi piacca molto. La tua soluzione è molto più elegante, purtroppo allo stato attuale mi è impossibile usarla. Mi devo arabbattare come posso :(

Grazie

Diego
***
Mignolo, stai ponderando quello che sto ponderando io?
Credo di sì Prof, ma se i nani fossero stati otto, si sarebbe chiamata... 'Biancaneve e gli otto nani'
***

Brainkiller Profilo | Guru

>Grazie infinite.
>Purtroppo non posso utilizzare la tua soluzione perché in vb
>.net 2003 non funzionano i dataset tipizzati (quelli che fai
>come: <Elemento>)

Non sono DataSet tipizzati ma Generics.

>La soluzione (temporanea) che ho usato io è questa:
>Non che la cosa mi piacca molto. La tua soluzione è molto più
>elegante, purtroppo allo stato attuale mi è impossibile usarla.
>Mi devo arabbattare come posso :(

In ogni caso quello che hai scritto tu e quello che ho scritto io è la stessa identica cosa. La classe generica (Elemento) me la sono creata per essere più veloce invece di andare a crearemi un DataSet, collegarmi al database, riempirlo, ecc.ecc. solo per questo.
Ciao

David De Giacomi | Microsoft MVP
http://blogs.dotnethell.it/david/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5