Combobox correlate con relazione padre-figlio Datagridview

mercoledì 21 novembre 2012 - 20.23
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010  |  Access (.mdb)  |  Office 2007

slenderman Profilo | Newbie

Salve a tutti,sono nuovo di questo forum;sono alle prme armi con vb.net e sto creando un programmino per la gestione di un negozio;il mio problema è questo:ho una datagridview con più combobox ,e vorrei che in base alla scelta della prima combobox,vengano visualizzate solo alcune opzioni nella seconda combobox,poi in base alla scelta della seconda combobox mi cambi a sua volta le opzioni della terza combobox e cosi via.....Spero mi sia spiegato al meglio.Come posso farlo?Grazie a tutti in anticipo.

ridaria Profilo | Expert

Innanzitutto devi gestire l'evento comboBox_SelectedIndexChanched
e cioè l'evento che si scatena quando cambi la selezione nella comboBox.

Nel caso di oggetti appartenenti ad una griglia la gestione degli eventi di questi oggetti è un pò diversa, per il semplice fatto che il controllo non esiste fin quando la griglia non è renderizzata, e quindi il classico doppio click sul controllo non ti apre la lista di eventi.


Detto ciò per associare al comboBox in questione l'evento lo devi fare manualmente da creando un event Handler che viene gestito nell'evento cellClick della griglia ed intercettando la colonna su cui si è fatto click, come vedi di seguito.

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

cmbColumn è il nome della colonna che contiene la combo box.

la cmbColumn_SelectedIndexChanched a cui siriferisce la rutine di sopra è la routine che crei a mano ed in cui metti il codice che ti occorre e che quindi verrà eseguito quando cambia la selezione della comboBox in questione (cioè quella appartenente ad una colonna della griglia)

Ciao

fammi sapere



Riccardo D'Aria

slenderman Profilo | Newbie

Ciao Ridaria! Innanzitutto ti ringrazio per la velocissima e ottima risposta;ma poiché non ho molta esperienza con questo linguaggio,mi potresti dare una mano con questo esempio?Allora le colonne sono (Marca,Modello,Cilindrata,Carburante),se nella colonna marca scelgo "Fiat",in Modello mi devono uscire solo i modelli della Fiat,dopo aver scelto il modello ,nel campo cilindrata mi dovrebbero solo le cilindrate del modello scelto,e poi in carburante mi devono uscire solo le versioni disponibili.Scusa per il papello,ti ringrazio ancora per l'interessamento,sei un grande :) Ciaoooo

ridaria Profilo | Expert

devi fare le interrogazioni al database sulla base di ciò che ti occorre:

Fiat,
allora interroghi la tabella modello ed estrai tutte le macchine che appartengono a fiat


e via dicendo.


Ciao
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao,il mio problema è questo,so più o meno come fare le query,ma non so da dove iniziare ,e dove inserirle per fare quello che voglio...Mi potresti illustrare qualche esempio,per favore?Grazie.
PS:Il mio database è un database access.
Ciaoo.

ridaria Profilo | Expert

....


questo è un pezzo di codice che esegue una query su un db di access e popola una griglia.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

parti da qui , ma ce ne è da studiare.

CIAO
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao,grazie per il sostegno,ti volevo chiedere un'altra cosa che riguarda questo programma...ho visto che c'è il codice che apre e chiude la connessione al database,poichè io ho fatto il collegamento al db tramite il wizard di visual studio,e quindi non c'è la parte di codice,va bene lo stesso,o devo farlo per forza così?Grazie ancora.

ridaria Profilo | Expert

>Ciao,grazie per il sostegno,ti volevo chiedere un'altra cosa
>che riguarda questo programma...ho visto che c'è il codice che
>apre e chiude la connessione al database,poichè io ho fatto
>il collegamento al db tramite il wizard di visual studio,e quindi
>non c'è la parte di codice,va bene lo stesso,o devo farlo per
>forza così?Grazie ancora.

non saprei mai usato il wizard.

Prova così vedi che accade.


fammi sapere

Riccardo D'Aria

slenderman Profilo | Newbie

Ciao ho provato a modificare il codice che mi hai postato tu prima ma non succede nulla,come posso visualizzare le righe nella datagridiview?Grazie
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ridaria Profilo | Expert

>Ciao ho provato a modificare il codice che mi hai postato tu
>prima ma non succede nulla,come posso visualizzare le righe nella
>datagridiview?Grazie
>
>Dim Connection As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data
>Source=c:\database2.accdb;Jet OLEDB:Database Password=password")
>Dim Command As New OleDb.OleDbCommand
>Dim ds As New Dataset
>Dim da As New OleDb.OleDbDataAdapter
>Dim row As System.Data.DataRow
>Dim Count As Integer
>
>Connection.Open() 'open up a connection to the database
>Command.Connection = Connection
>
>da.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM Marche",
>Connection)
>da.Fill(ds, "nomeTabella") 'Fill the dataset, ds, with the above
>SELECT statement
>Count = ds.Tables("nomeTabella").Rows.Count
>
>While Count > -1 'loop through for each row, add it to the
>datagridview
>row = ds.Tables("nomeTabella").Rows.Item(Count)
>Datagridview.rows.add(row.Item(0))
>Count = Count - 1
>End While
>
>Connection.Close()

in luogo di dtabase2 devi mettere il nome della tabella interessata che mi pare sia: Marche

io nel codice ho messo: nomeTabella

Ciao

Riccardo D'Aria

slenderman Profilo | Newbie

ho cambiato come hai detto tu ma niente la datagridview rimane vuota..perchè?

ridaria Profilo | Expert

se non ti da errori,

possiamo dedurre che tutto funziona, ma che non accede al db
possono esservi diversi casi.
la connessione non punta giusta,

la query è sbagliata;


verivica se nel loop ci entra, se non ci entra vuol dire che non legge la tabella.
e quindi devi scoprire perché ;-)

ciao fammi sapere
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao,il codicec secondo me va bene , ma in qual e evento lo devo inserire ,io l'ho messo nel formload ,è giusto?Grazie

ridaria Profilo | Expert

certo anche li va bene, significa che vuoi popolare la griglia all'apertura del form
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao,non ho risolto questa cosa... ecco il mio codice completo,la connessione al database avviene con successo perchè ho messo un msgbox però non mi visualizza nessuna colonna....come posso fare?Grazie.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ridaria Profilo | Expert

>Dim dbprovider As String = "Provider=Microsoft.ACE.OLEDB.12.0;"
>Dim dbsource As String = "Data Source=C:\Users\Crash\Documents\Database2.accdb"


purtroppo non so neanche cosa sia un db con estensione accdb, probabilmente nuove versioni di Access.


Il pezzo di codice che ti passo funziona su un mio DB di access di office 2000 e comunque un db access .mdb.
Tutto intero lo devi mettere nell'evento Load.




Dim ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\db_PrezzyAndrea.mdb"

Dim Connection As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db_PrezzyAndrea.mdb")
Dim Command As New OleDb.OleDbCommand
Dim ds As New DataSet
Dim da As New OleDb.OleDbDataAdapter
Dim row As System.Data.DataRow
Dim Count As Integer

Connection.Open() 'open up a connection to the database
Command.Connection = Connection

da.SelectCommand = New OleDb.OleDbCommand("SELECT * FROM tRegione", Connection)
da.Fill(ds, "tRegione") 'Fill the dataset, ds, with the above SELECT statement
Count = ds.Tables("tRegione").Rows.Count

While Count > 0 'loop through for each row, add it to the datagridview
row = ds.Tables("tRegione").Rows.Item(Count - 1)
DataGridView1.Rows.Add(row.Item(0))
Count = Count - 1
End While

Connection.Close()

vedi un pò cosa riesci a fare.

CIAO
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao ,grazie ancora per l'interessamento,il formato del database è strano perché è l'ultima versione di access e non esistono più con formato .mdb....adesso provo il tuo codice e ti faccio sapere....:) grazie

slenderman Profilo | Newbie

L'ho appena provato ,ma niente la stessa cosa del mio ,fa la connessione ma non visualizza nulla...per sicurezza mi potresti fare una lista delle cose da fare in cronologia...tipo dopo che ho inserito la gridview devo fare qualcosa ?Grazie ciaoo

ridaria Profilo | Expert

hai tem viever o cross loop?
Riccardo D'Aria

slenderman Profilo | Newbie

no non ce l'ho ,per favore mi potresti fare gli step da compiere?Grazie e scusa il disturbo.....

ridaria Profilo | Expert



dovresti mettere tante colonne nella griglia quanti sono i campi della tabella nulla di più.


ma devi accertarti che leggi i dati nella tabella.

entra nel codice in debug, fai un loop sul datable altrimenti non fai neanche un passo così.

Spiegare le cose punto per punto via post è più un danno che altro.

ciao
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao ho appena risolto,mi connette al database e mi fa anche la query :) ecco il codice.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Ma adesso torniamo all'argomento principale....Quindi adesso che so come fare le query come posso farle con i combobox nella datagridview?Grazie ancora per la pazienza.

ridaria Profilo | Expert

allo stesso modo.

Per ogni combo esegui la lettura dal db e poi popoli la combo.

Googla un pò che troverai del codice adatto alle tue esigenze.


:-)

CIAO
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao,ma su quale evento devo caricare il codice?Grazie.

ridaria Profilo | Expert

come ti ho spiegato nel primo post.


Questa è una cosa un pò complicata però
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao ,scusa ma come posso fare ,hai un'link con qualche esempio?,perchè in rete non trovo nulla di utile...Grazie.

ridaria Profilo | Expert

usa google:

popolare combobox+access+vb.net
e cose simili

CIAO
Riccardo D'Aria

slenderman Profilo | Newbie

Ciao ho trovato questo codice,mi aiuteresti ad adattarlo?Grazie ancora.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5