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, Combobox e compagnia
giovedì 25 novembre 2004 - 15.23
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
gio 25 nov 2004 - 15:23
Ciao a tutti,
ho notevoli difficoltà a comprendere come VB.NET gestisce i vari ListBox (CheckedListBox,ComboBox, ecc.)
In particolare, data una tabella di database composta da:
chiave|NomeArticolo
riesco a stampare nella CheckedListBox tutti gli articoli letti dalla tabella grazie a CheckedListBox.Items.Add(NomeArticolo).
Non riesco però a capire come mantenere il legame anche con la chiave che è poi il riferimento che mi interessa avere quando seleziono un determinato NomeArticolo.
Qualcuno mi può dare qualche dritta ?
Grazie.
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
gio 25 nov 2004 - 16:48
Ciao..nel caso di Combobox esiste una proprietà "valuemember", che dopo aver collegato con la tua table puoi settare sul campo che vorrai in output..es. nella tua tabella Chiave|NomeArticolo, puoi visualizzare i nomi articolo e avere in output dalla combobox il campo chiave, da utilizzare.
nel caso di una listview puoi creare una colonna nascosta (Size 0), e in output prendere il valore della colonna per l'elemento selezionato
listview.selecteditems(0).subitem([IndiceColonnaReturn])
A presto.
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
gio 25 nov 2004 - 17:36
Grazie per la risposta.
valuemember esiste in effetti anche per la CheckedListBox.
Tuttavia il mio problema è come collegare all' Item appena aggiunto il valuemember .
Finora quello che sono riuscito a fare è solo questo:
Public Function Manufacturers()
DBQuery.CommandText = "SELECT chiave, nome_articolo FROM articoli"
datRead = DBQuery.ExecuteReader
Do Until datRead.Read = False
Me.CheckedListBox1.Items.Add(datRead("nome_articolo"))
Loop
datRead.Close()
End Function
Potrei lavorare costruendo degli array ma non mi sembra che sia la strada migliore da percorrere.
Help!!!
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
ven 26 nov 2004 - 08:21
Visto che non hai filtri ma visualizzi una tabella intera non ti conviene collegare la combobox in progettazione, con le 2 proprietà "DataSource" e "displaymember"?
In questo modo tutti i tuoi record sono inseriti automaticamente nella combo, e in ucita trovi il valore del campo impostato in "ValueMember"..
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
ven 26 nov 2004 - 10:08
Non è che potresti darmi qualche esempio di codice?
Mi va bene anche qualche link che spieghi ciò che mi dici di fare.
In ogni caso Grazie 1000
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
ven 26 nov 2004 - 10:54
Per esempio, per inserire i dati nella combobox: supponendo di lavorare con la tua tabella contenente i 2 campi IdKey|CodiceArticolo, puoi crearti un data Adapter e quindi su di esso un dataset contenente la tua tabella(che io chiamo ora dataset11)
Dopodichè imposti cbbox.Datasource = dataset11.tabella
cbbox.DisplayMember = "CodiceArticolo"
cbbox.ValueMember = "IdKey"
(Queste proprietà puoi anche impostarle visivamente in progettazione, direttamente sulla combobox)
Al verificarsi dell'evento "SelectionChangeCommitted" della combo, troverai in uscita il valore del campo IdKey.
Private Sub cbbox._SelectionChangeCommitted(ByVal sender As Object, ByVal e As System.EventArgs) Handles cbbox.SelectionChangeCommitted
dim Id as string
Id = cbbox.ValueMember ' Restituisce il valore del campo Idkey x il codice articolo scelto
End Sub
Spero di averti chiarito le idee.. a presto.
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
ven 26 nov 2004 - 14:39
Ho fatto come mi hai detto:
Function articoli()
Dim da As New MySQLDataAdapter
Dim ds As New DataSet
da.SelectCommand = New MySQLCommand("SELECT chiave, articolo FROM articoli", DBConn)
ds.Clear()
da.Fill(ds, "articoli")
Me.CheckedListBox1.DataSource = ds.Tables("articoli")
Me.CheckedListBox1.DisplayMember = "articolo"
Me.CheckedListBox1.ValueMember = "chiave"
End Function
Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
Dim Id As String
Id = CheckedListBox1.ValueMember
MessageBox.Show("Id: " + Id)
End Sub
Quando viene visualizzata la MessageBox Id è sempre uguale alla stringa "chiave" e non al valore di chiave.
Che dici mi do all'ippica ?
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
ven 26 nov 2004 - 15:11
=) No, mi sbagliavo io..effettivamente andavo a memoria..poi verso il fine settimana perdo qualche colpo...
il campo dove leggi il valore non è "ValueMember", ma "SelectedValue"..
quindi :
Dim Id As String
Id = CheckedListBox1.SelectedValue
MessageBox.Show("Id: " + Id)
Prova cosi..e scusa ancora..
Ciao
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
ven 26 nov 2004 - 15:26
Dim Id As String
Id = CheckedListBox1.SelectedValue
MessageBox.Show("Id" + Id)
Ottengo il seguente errore:
Cast non valido dal tipo 'DataRowView' al tipo 'String'
ho provato a definire Id come tipo DataRowView e a fare un Ctype di Id as String, ma niente da fare di dice che è impossbile coinvertire in Stringa il tipo DataRowView.
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
ven 26 nov 2004 - 16:04
Non ho mai provato con listbox, credo che tu debba specificare selectedvalue(Indice), che rappresenta l'indice della colonna interessata..sto solo supponendo, perchè ripeto, non l'ho mai fatto, ma la sintassi dovrebbe essere questa:
Id = CheckedListBox1.SelectedValue(Indx).tostring
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
ven 26 nov 2004 - 17:20
In effetti mi sa che hai ragione, occorre passare anche l'indice di riga per recuperare l'elemento.
Ho modificato la Sub in questo modo
Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
Dim Id As String
Id = CheckedListBox1.SelectedValue(CheckedListBox1.SelectedIndex)
MessageBox.Show("Id" + Id)
End Sub
In debug vedo che effettivamente i dati ci sono, se clicco su un paio di checkbox mi restituisce qualche elemento ma poi mi dà questo errore : Indice oltre i limiti della matrice.
Mi sa che mi sto perdendo in un bicchier d'acqua.
In ogni caso grazie per il prezioso e paziente aiuto che mi hai dato.
civetta
Profilo
| Newbie
29
messaggi | Data Invio:
ven 26 nov 2004 - 21:00
Scusate se scrivo qui ma non riesco a inviare nessuna richiesta di aiuto in altro modo. Vogliate perdonarmi..
Ho il seguente problema:
Tabella Nazioni su connessione A
Tabella Clienti che contiene piu nazioni su connessione A
Tabella Ordini che contiene pià clienti su connessione B
Devo recuperare tutti gli ordini che appartengono ad una determinata nazione, avevo creato una bella query sql con dei Join sulle tre tabelle (Access me la visualizza correttamente) ma nel momento di passarlo al dataadapter mi sono accorta che questo accetta una sola connessione. Qual'è la soluzione ?
Per ora ho caricato separatamente le tre tabelle nel dataset che per mia fortuna non sono molto grosse ma come faccio a filtrare il campo Nazione sugli ordini ?
La nazione è selezionata con una combobox ed è tutto il giorno che ho gli stessi problemi di questo articolo!
I dati filtrati li volevo visualizzare in un datagrid.
Grazie a tutti per l'attenzione
A proposito come faccio ad inviare una richiesta di aiuto? La pagina non mi è disponibile!
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
lun 29 nov 2004 - 08:09
Ciao..innanzitutto il modo per aprire un topic tuo:
Clicca sul nome del forum dove vuoi che compaia il messaggio, poi quando vedi l'elenco dei topic clicca su "Apri un nuovo Thread", che è scritto in blu sopra la lista..
Riguardo al tuo problema io selezionerei la nazione con una combobox come fai tu, ma una volta ottenuta la nazione farei una query con un datareader, senza utilizzare l'adapter. I risultati che ottieni man mano che leggi il datareader li butti in una listview (o in un datagrid, come preferisci)..
Ciao
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
lun 29 nov 2004 - 08:44
Finalmente ci sono arrivato, la sintassi corretta è:
Id = CheckedListBox1.SelectedItem(0)
Grazie ancora per avermi aiutato
Andy
Profilo
| Senior Member
487
messaggi | Data Invio:
lun 29 nov 2004 - 10:27
Bene, perfetto...
Di nulla, a presto.
civetta
Profilo
| Newbie
29
messaggi | Data Invio:
lun 29 nov 2004 - 10:33
Grazie Andy ,
ho risolto il problema aggiungendo una colonna ' nazione' alla datatable degli ordini e con un ciclo for each ho aggiornato il valore della nazione. Così ho tutti i dati per filtrare gli ordini per nazione.
civetta
Profilo
| Newbie
29
messaggi | Data Invio:
lun 29 nov 2004 - 10:45
Per scusarmi con Tantalo per essermi intromessa nella sua richiesta di aiuto vorrei darti questa dritta:
Se hai la necessità di associare il valore restituito dalla combobox ad una sorgente dati principale devi creare un databinding sul combobox. Per esempio tabella principale Impiegati combobox su Settori e vuoi salvare il valore del settore sul campo di Impiegati.
comboSettori.DisplayMember="Nome"
comboSettori.ValueMember="ID"
comboSettori.DataSource= settori
' collego il controllo ComboBox con la sorgente dati principale degli Impiegati
comboSettori.DataBindings.Add("SelectedValue",Impiegati,"SettoriID")
Ciao
Tantalo
Profilo
| Newbie
32
messaggi | Data Invio:
lun 29 nov 2004 - 11:22
nessun problema civetta.
In effetti il nuovo problema che sto affrontando è proprio questo, impostare come selected una delle voci della mia checkedlistbox.
Ho una variabile che contiene l'ID e dovrei impostare come Selected l'item della checkedlistbox in corrispondenza del quale valuemember è = ad ID.
Il codice che mi hai inviato effettua una sorta di Join con una tabella principale, io però non ho una tabella ma un unico valore inserito dentro ID.
Spero di essere stato chiaro.
Grazie.
maximum
Profilo
| Newbie
41
messaggi | Data Invio:
mer 3 feb 2010 - 23:51
una volta che ho bindato la combobox con un datatable, volessi aggiungere in testa una riga vuota come posso fare?
scusate se mi sono intromesso e grazie a tutti.
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 !