Newsgroup: it.comp.lang.visual-basic
Titolo: Popolare DataGridView

Ciao,
 
Avrei la necessità di visualizzare i dati di una tabella in DataGridView; tale tabella è su SQL Server e arriva da un server in rete e non locale pertanto non posso creare l'origine dati.
Ho creato così una connessione alla tabella da codice :
 
Public conn As New ADODB.Connection
    Public rs As New ADODB.Recordset
 
    Sub Connetti()
 
        With conn
            .Open("driver={SQL Server Native Client 10.0}; server=Server; uid=ID; pwd=PSW; database=NomeDB;")
            .CursorLocation = ADODB.CursorLocationEnum.adUseClient
        End With
 
    End Sub
 
Poi mi apro la tabella e qui dovrei popolare la mia DataGrid ma non so come fare..
 
Sub VediRicette2()
 
        Dim query As String
 
        If (conn.State = 1) Then ' se la connessione ha avuto esito positivo'
 
            query = "SELECT * FROM T_Regolazioni Order by DataOra Desc" ' creazione della query per interrogare il database '
 
            REM apertura del recordset
            With rs
                .Open(query, conn, , , -1)
            End With
 
            If (rs.RecordCount > 0) Then ' se il recordset non è vuoto '
 
                While Not rs.EOF ' esegui finchè non sei alla fine del file '
 
 
                    DataGridView1.DataSource = (rs)
                    DataGridView1.DataMember = ("T_Regolazioni")
 
                    DataGridView1.Columns("Ident").DataPropertyName = ("ID")
 
 
                    rs.MoveNext() ' ad ogni ciclo mi sposto al record successivo - non omettere altrimenti entra in loop infinito '
 
                End While
 
            Else
 
                'ComboBox1.Items.Add("nessun record") ' se non sono presenti record aggiunge solo questa riga '
 
            End If
 
            rs.Close() ' chiusura della connessione '
 
        End If
 
    End Sub
 
Grazie
Marco

Il giorno giovedì 14 giugno 2012 08:38:10 UTC+2, Marco75 ha scritto:
 
Tralasciando in blocco tutto il resto del codice (tipo se è proprio necessario usare il vecchio ADODB in versione COM invece che 
ADO.NET
 nativo, cioè OleDbXXX per non dire direttamente SQLClientYYY, quelle specifiche per SQL Server...) la prima cosa che vedo è che stai mischiando due concetti:
stai scorrendo il recordset manualmente ma stai anche collegando la griglia con il data binding (While Not rs.EOF ... DataGridView1.DataSource = xxx)
 
La cosa non funziona così: o popoli la griglia manualmente, ma allora nel ciclo non devi assegnare nessun data source, o assegni il data source ma non fai alcun ciclo sui record.
 
Mio consiglio? fermati un secondo e approfittane per dare un'occhiata alle nuove classi 
ADO.NET
; vedrai che dopo la lettura di un qualsiasi tutorial, anche proprio minimale, questo codice lo riscrivi corretto da solo in 3 minuti...


Lasciamo perdere, non ho capito nulla di ciò che hai scritto e cercando 
ADO.NET
 ho fatto ancora più confusione!!
Mi tengo i dati nella mia listbox anche se usando un separatore tipo "|" tra i campi della tabella non ho tutto incolonnato con precisione...
Marco
 

 Marco
 
Come vuoi... però mi pare un peccato trasferire questo codice in .NET (immagino sia roba VB6) per continuare a usarlo così.
 
Ad ogni modo, la guida ufficiale la trovi qui: 
http://msdn.microsoft.com/it-it/library/e80y5yhx%28v=vs.80%29.aspx
 
 
e, prendendo quella come riferimento, non dovresti avere problemi ad interpretare questo, che è la versione minimal, ma funzionante, di quello che vuoi fare:
 
Sub VediRicette2()
 
  Dim conn As SqlClient.SqlConnection
  Dim adapter As SqlClient.SqlDataAdapter
  Dim dati As DataSet
 
  conn = New SqlClient.SqlConnection("Data Source=Server;Initial Catalog=NomeDB;User ID=ID;Password=PSW")
 
  adapter = New SqlClient.SqlDataAdapter("SELECT * FROM T_Regolazioni Order by DataOra Desc", conn)
 
  dati = New DataSet
  adapter.Fill(dati, "T_Regolazioni")
 
  DataGridView1.DataSource = dati
  DataGridView1.DataMember = "T_Regolazioni"
 
  conn.Close()
 
End Sub


Era VB 2005 Express. Detto ciò ho messo il tuo codice modificando i parametri di connessione e FUNZIONA!!!!
mi da un errore nel campo TimeStamp che non so cosa sia ma anzichè Select * metterò Select Campo1, Campo2, ecc...
mi sa che hai riolto tutto!
grazie


 
Marco, non me ne volere, ma questo � l'atteggiamento di chi vuole la 
pappa pronta e non si sforza minimamente di capire.
Luca ti ha dato un suggerimento e tu liquidi il tutto con: "lasciamo 
perdere".
Non so se programmi per hobby o per lavoro ma comunque sia un minimo 
sforzo lo devi fare; che senso ha usare il .NET framework e usare ADODB 
per l'accesso ai dati? Allora ti conviene tornare a programmare in VB6 
almeno eviti tutti i problemi legati a Interop!
 
 
Ciao, Vincenzo

 Ciao, Vincenzo
 
Mi scuso per la risposta, è stata una giornataccia! Programmo come autodidatta per cui devo procedere a piccoli passi senza avere basi sul codice; visto che la cosa per me era troppo difficile e non volevo appunto creare 1000 post per ottenere il codice finito, ho pensato di prendere un'altra strada per arrivare a ciò che volevo.
Marco