
xone2003 (Normal User)
Rookie
    
Messaggi: 32
Iscritto: 27/11/2008
|
Ciao a tutti,
Sono un principiante autodidatta ed avrei un problema che non riesco a risolvere.
Ho una tabella in cui vi sono due colonne "bike" e "categoria". le aggiorno con inserimenti da text box...
Ecco il problema:
Nella form vorrei usare una ComboBox (cb1) per selezionare i valori della colonna Bike ed un'altra combobox (cb2) che, in funzione della scelta in cb1 mi permetta di selezionare i soli valori di categoria legati alla scelta in cb1.
Purtroppo non riesco e cmq sia in cb1 che in cb2 visualizzo tutti i dati delle colonne.
Nb. non ci sono valori univoci in quanto sia una che l'altra possono avere dati uguali.
es.
Olmo Corsa
Olmo MTB
Cannondale Corsa
Cannondale MTB
spero di essermi spiegato.
grazie per l'aiuto.
|
|

xone2003 (Normal User)
Rookie
    
Messaggi: 32
Iscritto: 27/11/2008
|
in effetti rileggendo non sono stato proprio chiarissimo..
in pratica data una tabella "tab1" con colonne "Bike" e "Categoria" compilate come segue:
x Bike | x Categoria
Olmo | Corsa
Olmo | MTB
Cannondale | Corsa
Cannondale | MTB
Hantrax | MTB
vorrei che la prima Combobox (cb1) mi permettesse di visualizzare solo tra il valore Olmo, il valore Cannondale o Hantrax (3 scelte in totale), e la seconda combobox (cb2) mi permettesse di selezionare i valori (una volta sola) legati alla scelta che ho fatto nella cb1.
es. La cb1 dovrebbe mostrare selezionabili tre valori e cioè Olmo, Cannondale e Hantrax; se scelgo nella cb1 "Cannondale" la cb2 dovrebbe mostrare come selezionabili i valori "Corsa" e "MTB" mentre se seleziono dalla cb1 "hantrax" la cb2 dovrebbe mostrare esclusivamente il valore "MTB".
Ho provato nella table adapter relativa alla tab1 ad inserire una qry per poi ripescarla con la Cb1 ma niente da fare. Sembra ignorarla e mostra cmq sempre tutti i valori anche doppi della colonna scelta di rappresentare.
grazie
Ultima modifica effettuata da xone2003 il 27/11/2008 alle 12:56 |
|
eathBringer_avatar.jpg)
I)eathBringer (Normal User)
Pro
    
Messaggi: 127
Iscritto: 11/08/2008
|
Codice sorgente - presumibilmente VB.NET |
Private Sub cb1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb1.SelectedIndexChanged If cb1.SelectedIndex = 0 Or cb1.SelectedIndex = 1 Then cb2.Items.Clear() cb2.Items.Add("Corsa") cb2.Items.Add("MTB") Else cb2.Items.Clear() cb2.Items.Add("MTB") End If End Sub
|
|
|

xone2003 (Normal User)
Rookie
    
Messaggi: 32
Iscritto: 27/11/2008
|
Grazie per la risposta, però ho capito poco...
La comboBox1 (CB1) nella form prende i valori dalla tabella (Tab1) alla colonna "Bike" mentre La CB2 prende valori sempre dalla Tab1 ma dalla colonna "Categoria".
Io non devo inserire valori manualmente nelle combo ma prendere quelli che già esistono nella Tabella1.
Le combobox mi servono solo in modo filtrato come ho spiegato nei primi post per selezionare dei valori da una tabella.
poi in un secondo momento andrò a prendere i valori delle combo con una query di "insert to" per popolare un'altra tabella.
grazie per la pazienza.
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
La versione di vb che usi è la 2008 o una precedente? Nel primo caso, Linq è la soluzione migliore e più veloce. Nel secondo caso, dipende da che tipo di dataset hai usato. L'hai creato con il wizard di visual studio o l'hai caricato genericamente da codice?
A seconda della risposta potrei postarti un codice diverso, ma sulla base della struttura della tabella, l'idea è questa: dato il valore di cb1, trovare nella tabella tutti i record che lo contengono nella prima colonna, e tra questi selezionare tutti i valori diversi della seconda colonna.
|
|

xone2003 (Normal User)
Rookie
    
Messaggi: 32
Iscritto: 27/11/2008
|
Grazie Totem della risposta,
la versione è visual studio 2008..
Il data set l'ho creato semplicemente spostando la tabella nella form e seguendo il wizard per configurarla.
purtroppo ignoro completamente cosa sia linq; eventualmente il codice (se linq è un linguaggio alternativo all'sql) lo devo inserire nel sorgente della combobox?
Ho imparato a fare diverse cose ma solamente come autodidatta e studiando sorgenti diverse nella gestione di DB. Se mi scrivi del codice mi piacerebbe sapere anche dove inserirlo.
grazie!
|
|

Il Totem (Admin)
Guru^2
    
Messaggi: 3635
Iscritto: 24/01/2006
|
In questo caso si può usare Linq, che non è altro che un semplice linguaggio di querying molto simile all'sql, che però è possibile direttamente nel codice.
http://totem.altervista.org/guida/versione2/C19.php
Quando si crea un dataset, viene automaticamente creata una nuova classe (di solito si chiama [Nome]DataSet se non hai modificato il nome), e all'interno di essa, altrettante classi per ogni tabella, e in queste ultime, altrettante proprietà per ogni colonna. Per selezionare le righe che vuoi, ammettendo che il dataset tipizzato si chiami BikeDataSet, che la tabella si chiami BikeDataTable e che le colonne si chiamino rispettivamente Bike e Categoria, il codice sarebbe simile a questo:
Codice sorgente - presumibilmente VB.NET |
Dim L = From Riga As BikeDataSet.BikeDataTableRow In Me.BikeDataSet.BikeDataTable _ Where Riga.Bike = cb1.SelectedItem _ Select Riga cb2.Items.Clear() For Each Riga As BikeDataSet.BikeDataTableRow In L cb2.Items.Add(Riga.Categoria) Next
|
|
|

xone2003 (Normal User)
Rookie
    
Messaggi: 32
Iscritto: 27/11/2008
|
Allora, premessa sempre la mia totale incapacità anche nelle cose + semplici..
confermo Visual Basic...
Il dataset si chiama "DBdatibicidataset"
La tabella "TipologiaBike"
Poi ho una riga "Bicicletta"
ed una riga "categoria"
cb1 "Bike_combobox"
cb2 "Cat_combobox"
Ho scritto il codice nella sorgente della cat_combobox (forse non è il posto giusto?)
-----------------------------------------------
Private Sub Cat_ComboBox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Cat_ComboBox.SelectedIndexChanged
Dim L = From riga As DBDatiBiciDataSet.TipologiaBikeRow In Me.DbDatiBiciDataSet.TipologiaBike _
Where riga.Bicicletta = Bike_ComboBox.SelectedItem _
Select riga
Cat_ComboBox.Items.Clear()
For Each Riga As DBDatiBiciDataSet.TipologiaBikeRow In L
Cat_ComboBox.Items.Add(Riga.Categoria)
Next
End Sub
-----------------------------------------------
non fa assolutamente niente e la combobox nella form rimane vuota.
Probabilmente la soluzione è elementare ma non ci arrivo!
Ultima modifica effettuata da xone2003 il 28/11/2008 alle 18:41 |
|

Gianluca87 (Ex-Member)
Expert
    
Messaggi: 300
Iscritto: 16/11/2008
|
Ciao,
per quanto riguarda il metodo di lettura dal db
dipende sicuramente dalla mole di dati che devi elaborare, per piccole quantità di dati va benissimo linq per grandi moli di dati ti consiglio di documentarti sulle storeprocedure.
ho fatto un piccolo progettino che potrebbe esserti utile a capire il metodo con cui si popolano le combobox in .net
il progetto è in c#
se non sei pratico di c# puoi convertirlo in vb usando code converter di telerik http://converter.telerik.com/
puoi fare direttamente l'upload dello zip che contiene la solution
|
|