Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
ListBox WnForms, diverso da ListBox WebForm Asp.NET?
martedì 12 giugno 2007 - 19.26
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
gigi90
Profilo
| Senior Member
285
messaggi | Data Invio:
mar 12 giu 2007 - 19:26
Come posso memorizzare come elemento di una listbox un elemento al suo interno composto da testo(che verra visualizzato e valore, che costituisce il valore che memorizza l'elemento, proprio come ho sempre fatto con le listbox di asp.Net: quando infatti voglio aggiungere un elemento alla listbox, il metodo Add(object item), chiede solo un'oggetto(che verra visualizzato, ma non il valore, eppure esiste la proprità selected value, e quando si associa un origine dati, chiede la procedura guidata cosa memorizzare come valore e cosa visualizzare.
Come posso risolvere??
Grazie per l'attenzione!!
the_follet
Profilo
| Newbie
46
messaggi | Data Invio:
gio 14 giu 2007 - 01:17
Ciao Gigi,
a suo tempo cercai anche io il modo di impostare manualmente il campo "value" di una listbox (o combobox) winform.
Purtroppo, e non capisco il perchè sinceramente, pare che non sia possibile.
Sembra che il campo "value" possa essere utilizzato solo con il databinding tramite l'istruzione listbox.databinding.valuemember = "{nomecampo}"
E' curioso che in ambiente ASP, invece, la possibilità di assegnare il valore manualmente ci sia...
Diciamo che è passato un pò di tempo da quando feci questa ricerca, se qualcuno potesse smentirmi ne sarei lieto visto che la cosa interessa parecchio anche a me :D
Saluti.
Luca
the_follet
Profilo
| Newbie
46
messaggi | Data Invio:
gio 14 giu 2007 - 02:12
Ad ogni modo, pensandoci, possono esistere varie soluzioni alternative.
Innanzitutto, per esempio, potresti crearti una classe che espone i due campi (o, meglio ancora, proprietà) che ti interessano, quello testo e quello valore:
Obj.MyValue
Obj.MyDisplayedText
Dopodichè ti crei una collection di questi oggetti (tramite una arraylist, ad esempio) "parallela" alla listbox, nel senso che ogni volta che aggiungi, modifichi o elimini un elemento dalla listbox lo fai anche nella arraylist:
Dim CollectionOggetti as new ArrayList
Dim MyObj as Obj
Dim Testo as String = "Prova"
Dim Valore as Integer = 100
MyObj = New Obj
MyObj.MyDisplayedText = Testo
MyObj.MyValue = Valore
ListBox.Items.Add(Testo)
CollectionOggetti.Add(Obj)
(reitera l'inserimento con un pò di oggetti diversi)
In questo modo, utilizzando "listbox.selectedindex" (magari con l'evento selectedindexchanged), ti recuperi dalla arraylist l'oggetto selezionato ed il relativo campo valore:
TextBox1.Text = CollectionOggetti(listbox.selectedindex).MyValue
Teoricamente potresti anche utilizzare il databinding per collegare la listbox alla Arraylist, ma purtroppo non sarebbe "dinamico": una volta assegnato il DATASOURCE, la listbox verrebbe riempita con tutti gli elementi IN QUEL MOMENTO presenti nella collection, ma tutte le modifiche successive (aggiunta, modifica e cancellazione di elementi dalla collection) verrebbero ignorate. Per cui dovresti assegnare il datasource a nothing e poi di nuovo alla collection ogni volta che si verifica un cambiamento nell'elenco. Un refresh forzato e continuo, in pratica, e non so quanto possa interessarti.
Per rendere dinamico il databinding occorrerebbe implementare un'interfaccia che neanche ricordo come si chiami... per cui non posso aiutarti
Spero di averti dato qualche utile spunto per risolvere il problema, ma se qualcun altro conosce soluzioni meno laboriose e più efficaci mi farebbe piacere saperlo.
Ciao.
Luca
Torna su
Stanze Forum
Elenco Threads
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 !