Oppure

Loading
27/11/08 10:22
xone2003
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.
aaa
27/11/08 11:53
xone2003
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 27/11/08 11:56
aaa
27/11/08 12:20
I)eathBringer
    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
aaa
27/11/08 13:28
xone2003
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.

aaa
27/11/08 16:30
Il Totem
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.
aaa
27/11/08 16:56
xone2003
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!
aaa
28/11/08 15:45
Il Totem
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.
totem.altervista.org/guida/versione2/…
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:
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
aaa
28/11/08 17:39
xone2003
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 28/11/08 17:41
aaa