PDA

View Full Version : [VB2010] - Associare a variabile un DataGridView


lucausa75
26-11-2010, 23:26
Salve ragazzi,

a livello di form ho dichiarato queste variabili:

Dim MyDB As String = "Biblio.mdb"
Dim MyPW As String = ""
Dim MyTB As String = "Elenco Libri"

Successivamente ho creato anche una SUB tramite la quale mi connetto ad un database:

Private Sub EseguiConnessione(ByVal DB As String, ByVal PW As String, ByVal TB As String, ByVal DGV As DataGridView)

Quì in basso trovate come la richiamo a livello di programma:

EseguiConnessione(MyDB, MyPW, MyTB, dgvArchivio)

Voglio capire come dichiarare la variabile DataGridView per associarla alla griglia chiamata dgvArchivio e realizzare qualcosa del tipo:

EseguiConnessione(MyDB, MyPW, MyTB, MyDGV) e quindi dichiarare MyDGV ad esempio così:

Dim MyDGV As DataGridView = dgvArchivio ma non mi funziona...:muro:

Alle volte rimpiago il buon VB6 :D

MarcoGG
27-11-2010, 09:15
Ma come VARIABILE ?! :doh: :D

Con tutto quello che ho speso per farti studiare... :rolleyes: :D

Il DGV è un OGGETTO.
Se vai ad aprire il file ".Designer.vb" di una Form, che contiene tutto il codice generato da VS su operazioni eseguite in design, vedrai che :
Private Sub InitializeComponent()
...
Me.DGV = New System.Windows.Forms.DataGridView
...
Quindi il DGV aggiunto in design è già istanziato, non c'è nessun bisogno di creare un nuovo oggetto che è uguale-a-DGV...
E pertanto lo puoi passare direttamente in argomento ai Metodi che vuoi...

Ma ci vuole tempo e pazienza : il modo di pensare alla-VB6 ti perseguiterà ancora per un bel pezzo... ;)

lucausa75
27-11-2010, 09:56
Ma come VARIABILE ?! :doh: :D

Con tutto quello che ho speso per farti studiare... :rolleyes: :D

Il DGV è un OGGETTO.
Se vai ad aprire il file ".Designer.vb" di una Form, che contiene tutto il codice generato da VS su operazioni eseguite in design, vedrai che :
Private Sub InitializeComponent()
...
Me.DGV = New System.Windows.Forms.DataGridView
...
Quindi il DGV aggiunto in design è già istanziato, non c'è nessun bisogno di creare un nuovo oggetto che è uguale-a-DGV...
E pertanto lo puoi passare direttamente in argomento ai Metodi che vuoi...

Ma ci vuole tempo e pazienza : il modo di pensare alla-VB6 ti perseguiterà ancora per un bel pezzo... ;)

...variabile nel senso che in un progetto DGV si può chiamare dgvArchivio e in un altro dgvLista...

Quindi se uso la mia sub

EseguiConnessione(MyDB, MyPW, MyTB, XX)

nel progetto A dovrò dire a EseguiConnessione di inserire i dati dentro dgvArchivio (XX sarà dgvArchivio) mentre se la uso nel progetto B dovrò dire di mettere i dati dentro dgvLista (XX sarà dgvArchivio)...

Discorso tortuoso? :D
Grazie Marco... ;)

MarcoGG
27-11-2010, 10:04
Quindi se uso la mia sub

EseguiConnessione(MyDB, MyPW, MyTB, XX)

nel progetto A dovrò dire a EseguiConnessione di inserire i dati dentro dgvArchivio (XX sarà dgvArchivio) mentre se la uso nel progetto B dovrò dire di mettere i dati dentro dgvLista (XX sarà dgvArchivio)...

Discorso tortuoso? :D
Grazie Marco... ;)

No, va tutto bene... :)

lucausa75
27-11-2010, 12:01
No, va tutto bene... :)

...però avendo questa sub EseguiConnessione(MyDB, MyPW, MyTB, XX) e definendola così EseguiConnessione(MyDB, MyPW, MyTB, dgvArchivio) ricevo un bell'errore :confused:

Come ho fatto per queste variabili

Dim MyDB As String = "Biblio.mdb"
Dim MyPW As String = ""
Dim MyTB As String = "Elenco Libri"

pensavo ci fosse una cosa simile per la DatGridView per evitare di andare a scivere ogni volta ed n volte il nome della griglia.

Volevo scriverlo una sola volta e a monte del form...

MarcoGG
27-11-2010, 14:06
Anzitutto se stai scrivendo un Metodo ( in VB.NET le Sub e le Function sono METODI di una classe ), quella firma è da evitare :

Private Sub popolaDGV(ByVal MyDB As String, ByVal MyPW As String, ByVal MyTB As String, ByVal dgv As DataGridView)

In secondo luogo, se poi vuoi anche USARLO, quel metodo, è ovvio che gli devi passare il nome dell'oggetto dgv :
Private Sub popolaDGV(ByVal MyDB As String, ByVal MyPW As String, ByVal MyTB As String, ByVal dgv As DataGridView)

Dim cnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MyDB & ";Jet OLEDB:Database Password=" & MyPW & ";"
Dim sqlSelect As String = "SELECT * FROM " & MyTB
Dim conn As New OleDb.OleDbConnection(cnString)
Dim DAdptr As New OleDb.OleDbDataAdapter(sqlSelect, conn)
Dim Dtbl As New DataTable
DAdptr.Fill(Dtbl)
dgv.DataSource = Dtbl

End Sub

E ad esempio la utilizzo con :

Private Sub cmd_popola_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmd_popola.Click

popolaDGV(percorso & nomeDB, "", "nomeTabella", DataGridView1)

End Sub

Nessun errore.
Non capisco dove stia il problema.