Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Combo Box filtrata VB.net
Forum - C# / VB.NET - Combo Box filtrata VB.net

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 11:22
Giovedì, 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.

PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 12:53
Giovedì, 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
PM Quote
Avatar
I)eathBringer (Normal User)
Pro


Messaggi: 127
Iscritto: 11/08/2008

Segnala al moderatore
Postato alle 13:20
Giovedì, 27/11/2008
Codice sorgente - presumibilmente VB.NET

  1. Private Sub cb1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cb1.SelectedIndexChanged
  2.         If cb1.SelectedIndex = 0 Or cb1.SelectedIndex = 1 Then
  3.             cb2.Items.Clear()
  4.             cb2.Items.Add("Corsa")
  5.             cb2.Items.Add("MTB")
  6.         Else
  7.             cb2.Items.Clear()
  8.             cb2.Items.Add("MTB")
  9.         End If
  10.     End Sub


PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 14:28
Giovedì, 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.


PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 17:30
Giovedì, 27/11/2008
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.

PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 17:56
Giovedì, 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!

PM Quote
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Segnala al moderatore
Postato alle 16:45
Venerdì, 28/11/2008
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

  1. Dim L = From Riga As BikeDataSet.BikeDataTableRow In Me.BikeDataSet.BikeDataTable _
  2.   Where Riga.Bike = cb1.SelectedItem _
  3.   Select Riga
  4.  
  5. cb2.Items.Clear()
  6. For Each Riga As BikeDataSet.BikeDataTableRow In L
  7.   cb2.Items.Add(Riga.Categoria)
  8. Next


PM Quote
Avatar
xone2003 (Normal User)
Rookie


Messaggi: 32
Iscritto: 27/11/2008

Segnala al moderatore
Postato alle 18:39
Venerdì, 28/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
PM Quote
Avatar
Gianluca87 (Ex-Member)
Expert


Messaggi: 300
Iscritto: 16/11/2008

Segnala al moderatore
Postato alle 21:16
Venerdì, 28/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


Gianluca87 ha allegato un file: Es1.zip (40044 bytes)
Clicca qui per scaricare il file
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo