Problemi con datagridview di vb2008

giovedì 27 gennaio 2011 - 11.47
Tag Elenco Tags  Visual Studio 2008  |  SQL Server 2008

nappo Profilo | Newbie

Ciao a tutti! Sto scrivendo il mio primo programma (vb2008)e vi spiego il mio problema.
Ho creato una tabella (db sqlserver2008) nominata DOCUMENTI con 3 colonne(data ,descr, importo) ora vorrei popolare con datagridview le stesse colonne (data desc importo).
Ho usato queste istruzioni

dim n as integer = datagridview.rows.add(n)
datagridview1.rows.item(n).cell().value= data
datagridview1.rows.item(n).cell().value= desc
datagridview1.rows.item(n).cell().value= importo

facendo cosi inserisce solo la prima riga nella dgv
Mentre usando una listbox funziona (leggo tutte le righe richieste)

potreste corregermi l'errore grazie

alx_81 Profilo | Guru

>Ciao a tutti! Sto scrivendo il mio primo programma (vb2008)e
>vi spiego il mio problema.
ciao e benvenuto su dotnethell!

>Ho creato una tabella (db sqlserver2008) nominata DOCUMENTI con
>3 colonne(data ,descr, importo) ora vorrei popolare con datagridview
>le stesse colonne (data desc importo).
>Ho usato queste istruzioni

>potreste corregermi l'errore grazie
la tabella la dovresti leggere con ado.net e poi, il risultato (ad esempio un datareader) lo metti direttamente nella proprietà DataSource del tuo gridview..


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

nappo Profilo | Newbie

mi rendo conto di essere stato un pò generico
con datareader in effetti visualizzo tutti i dati caricati nella tabella fin qui ci siamo
ora in un altro form vorrei visualizzare questi dati solo relativi al mese corrente (20 righe)
in breve in un form ho i dati in generale nel secondo solo il mese corrente.
se uso
listbox.item.add("data" & "desc" & "importo") inserisce tutte la 20 righe del mese corrente
se invece uso dgv carica solo la prima riga
vorrei usare dgv è piu' carino da vedere.
spero di essere stato piu' preciso nella descrizione del problema
grazie per la risposta

alx_81 Profilo | Guru

>listbox.item.add("data" & "desc" & "importo") inserisce tutte
>la 20 righe del mese corrente
>se invece uso dgv carica solo la prima riga
>vorrei usare dgv è piu' carino da vedere.
>spero di essere stato piu' preciso nella descrizione del problema
il codice che posti nel primo messaggio è all'interno di un ciclo?


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

nappo Profilo | Newbie

il codice è questo
dim y as integer
dim uscite1 as string = "SELECT * FROM Uscite WHERE( Data >= ' " & data1 &" ' and Data ' " & data &" ' ) "
(la where data 1 data2 stringe la select al 01 31 del mese corrente)
dim cmd as SQLCOMMAND = new SQLCOMMAND(uscite1,sqlconn)
dim lguscite as SQLDATAREADER =cmd.EXECUTEREADER
WHILE lguscite.read()
DATAGRIDVIEW.ROWS.ITEM(Y).CELL(0).VALUE= lguscite("Data")
DATAGRIDVIEW.ROWS.ITEM(Y).CELL(1).VALUE= lguscite("Desc")
DATAGRIDVIEW.ROWS.ITEM(Y).CELL(2).VALUE= lguscite("Importo")
y = y + 1
end while
con questo codice il dgv viene popolato solo con l'ultima riga della tabella
mentre con listbox legge correttamente tutte le righe


alx_81 Profilo | Guru

Ti sconsiglio tantissimo di concatenare le stringhe in questo modo, perchè sei soggetto ad attacchi di tipo sql injection. Utilizza invece le query parametriche con ado.net.

>con questo codice il dgv viene popolato solo con l'ultima riga della tabella
Questo perchè agisci sul datagrid senza aggiungere righe. Ti consiglio di creare una struttura (che può essere un List Of, oppure un dataset/datatable) e di popolarla con quel ciclo. Solo dopo passa questo oggetto alla proprietà datasource della tua griglia.


--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi

nappo Profilo | Newbie

grazie per la dritta ho fatto un po fatica ma sono riuscito a risolvere il problema.

pauldomy Profilo | Newbie

puoi usare questo codice :


Dim cnn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\database1.mdb; User Id=admin;Password=;")
Dim da As New OleDbDataAdapter("SELECT * FROM Spese WHERE Data='" & txtDate.Text & "'", cnn)
Dim ds As New DataSet
da.Fill(ds)
DataGridView1.DataSource = ds.Tables(0)

cosi ti inserisce tutti i valori della tabella.
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