Aggiungere dati in un datagridview manualmente

giovedì 24 maggio 2007 - 15.47

trinity Profilo | Guru

salve ragazzi,
ho deciso di utilizzare per la visualizzazione dei dati un datagridview solo che non voglio procedere con l'utilizzo del dataset ma bensi aggiungere manualmente le righe nel datagridviw

ho scritto così:

For i As Integer = 0 To10
Me.DataGridView1.Rows(i).Cells(1).Value = var_codice
Me.DataGridView1.Rows(i).Cells(2).Value =var_nome
Me.DataGridView1.Rows(i).Cells(3).Value =var_citt
Next i

ma non mi funziona, doce sbaglio?

ciao
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

erongis Profilo | Junior Member

Ti dà un errore in particolare? oppure non fa nulla? Se vai col debug riga per riga, riesci a vedere se i valori si aggiornano?

trinity Profilo | Guru

si ferma sulla terza riga e di genera il seguente errore:
Index non compreso nell'intervallo. Richiesto valore non negativo e minore della dimensione dell'insieme.
Nome parametro: index
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

Cteniza Profilo | Guru

Prova il mio blog sulla gestione disconnessa di datagridview
http://community.visual-basic.it/lucianob/archive/2007/03/04/18795.aspx

trinity Profilo | Guru

ok vado a controllare ma volevo chiedere e se dovessi fare così:


For i As Integer = 0 To10
Me.DataGridView1.Rows.Add()
Me.DataGridView1.Rows(i).Cells(1).Value = var_codice
Me.DataGridView1.Rows(i).Cells(2).Value =var_nome
Me.DataGridView1.Rows(i).Cells(3).Value =var_citt
Next i
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

erongis Profilo | Junior Member

>ok vado a controllare ma volevo chiedere e se dovessi fare così:
>
>
> For i As Integer = 0 To10


OK anche se ti consiglio ti scrivere " "For i = 0 to DataGridView1.Rows.count - 1" così se aggiungi in futuro delle righe non devi modificare il ciclo.

>Me.DataGridView1.Rows.Add()

devi scrivere così: "Me.DataGridView1.Rows.Add(1)"
ma solo se le righe non sono già esistenti nella griglia ovviamente, altrimeni non scrivi nulla.

>Me.DataGridView1.Rows(i).Cells(1).Value = var_codice
>Me.DataGridView1.Rows(i).Cells(2).Value =var_nome
>Me.DataGridView1.Rows(i).Cells(3).Value =var_citt
>Next i

Questo va bene, ma dall'errore significa che la colonna 3 non esiste, probabilmente partono da 0 fino a 2

quindi dovrebbe essere:
Me.DataGridView1.Rows(i).Cells(0).Value = var_codice
Me.DataGridView1.Rows(i).Cells(1).Value =var_nome
Me.DataGridView1.Rows(i).Cells(2).Value =var_citt

anche se è meglio utilizzare dele costanti di colonna e passare quelle invece dei numeri, così se in futuro dovessi aggiungere/eliminare colonne (capita sempre, sempre, sempre) saresti a posto.

Cteniza Profilo | Guru

Ribadisco quanto già detto più volte:
Non ha nessun senso fare una battaglia di retroguardia per mantenere un datagridview non bindato ad un datatable / dataset.
Infatti una fonte dati locale è indispensabile, quella di aggiungere manualmente le colonne è una pura illusione, datagridview si autocostruisce una fonte dati ci fa sopra il binding.
Tanto vale rassegnarsi e se proprio non si vuole un databaase collegato non ci vuole poi molto disegnare un dataset / datatable con l'ide ed utilizzare quello come fonte dati.

erongis Profilo | Junior Member

Non è questo il luogo per fare discussioni teoriche su cosa è meglio e su cosa no in generale. Nello specifico volevo solo dare un consgilio rapido al nostro amico, evitandogli di studiarsi tutto daccapo (magari ha una consegna a breve e non ha tempo di applicarsi per bene.. a me capita sempre :-)).
Se vogliamo poi disctutere su "cosa ha senso e cosa no", permettimi di dissentire dal tuo binding ai dati tramite dataset. Tutti i seminari ai quali ho partecipato, Microsoft e non, sono d'accordo su un punto: "Il binding va bene se hai pochi dati da caricare, ma poi le prestazioni sono insostenibili". Considera che quando usi il binding i dati vengono memorizzati in locale ben TRE volte, immagina che, prove alla mano, se hai una tavola con 2000 records da aprire aspetti anche 30 secondi per aprire una datagrid. Decisamente meglio va se apri una datareader e copi tutto sulla datagrid, tanto il più delle volte, è una cosa in sola lettura e non serve alcun binding.

Comunque, magari è meglio aprire un post in qualche sezione del forum più adatta e sentire gli altri Guru cosa ne pensano.

Cteniza Profilo | Guru

Semplicemente dicevo che pensare di gestire datagridview come avveniva con vb6 con la flexgrid è una pia illusione.
Si fa tanta fatica a scrivere del codice per poi ottenere che la fonte dati se la autocostruisce comunque tanto vale creare "volante" una tabella.
Inoltre, contrariamente a quanto pensi (se non devi fare aggiornamenti non hai il binding) il binding c'è sempre, infatti non è altro che il collegamento di un controllo (oggetto) con un'altro oggetto (nel nostro caso la fonte dati locale) locale.
Il passaggio tra la fonte dati locale e il database può, questo sì essere fatto con comandi sql diretti (insert, delete , update) oppure tramite la mediazione del dataadapter/tableadapter.
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5