Problemi con la gestione della gridview

giovedì 02 luglio 2009 - 14.32

cosmopsis Profilo | Junior Member

ciao,

sono due giorni che brancolo nel buio. Vorrei utilizzare una gridview in una pagina aspx di modo da visualizzare una tabella access 2000.
Se faccio il binding al solito modo (creo una datatable e la passo alla grid) tutto ok.
Il problema nasce dal fatto che alcuni campi della tabella sono numerici e ciascun numero significa qualcosa. Per cui dovrei sostituire questo numero con il suo significato "in chiaro". La domanda che vi faccio è questa: non trovando modo di poter gestire la gridview direttamente (es. in pseudocodice: gridview[riga][colonna] = "PIPPO" con "PIPPO" ovviamente come decidifica di un valore numerico), devo: 1. collegarmi alla tabella con un dataReader e leggere tutti i record; 2. per ciascun record letto metterlo in un datatable creato ad hoc per poi passarlo alla gridview. Vi posto parte del codice semplificato al massimo:

Dim dtTbGrid As DataTable
dtTbGrid = New DataTable()

Dim dtColGrid As DataColumn = New DataColumn()
dtTbGrid.Columns.Add("codice", Type.GetType("System.Int32"))
Dim dtRowGrid As DataRow = dtTbGrid.NewRow()
While objDataReader.Read = True
dtTbGrid.Rows.Add()
dtRowGrid("codice") = objDataReader("cnom")
End While

griView.DataSource = dtTbGrid
griView.DataBind()

Nell 'esempio salto la decodifica...
La gridview risulta composta da tante righe vuote quanti sono i campi letti dal datareader. Probabilmente sbaglio qualcosa nel ciclo While. Poterste dirmi l'eventuale errore e se il modo che ho trovato (cioé datatable formata dai record del datareader) è corretto? Oppure mi suggerite qualcos'altro?
grazie.

balfaz Profilo | Expert

interessante il tuo ragionamento, ma non potevi usare l'evento rowdatabound del tuo gridview?, che sarebbe quello che si esegue durante la costruzione di ogni riga del gridview, bastava fare cosi:
if e.Row.RowType = DataControlRowType.DataRow Then
valuti il valore da inserire e poi
e.Row.Cells(tuaCella).Text = Valore
end if

per quello che ho capito cosi dovresti sistemare il tutto.
facci sapere
Dove troverai sempre una mano disposta ad aiutarti è nell'estremo del tuo proprio braccio

cosmopsis Profilo | Junior Member

beh... non l'ho usato per poca dimestichezza con le gridview.
Comunque sia ho risolto in questo modo:

'--1. creo il dataset per il binding con la gridview--
Dim dtTbGridView As DataTable = New DataTable()
Dim dtTbGridView As DataColumn = New DataColumn()

' 2. creazione campi del datatable
dtTbGridView .Columns.Add("Nr.", Type.GetType("System.Int32"))
'eccetera

'3. lettura tabella record per record--
'..apro connessione
' ..inizializzo il datareader...

While objDataReader.Read = True
Dim dtRowGridView As DataRow = dtTbGridView.NewRow()
i += 1
dtRowGridView("Nr.") = i
'eccetera
End While

'finalmente effettuo il binding

magari a qualcuno può servire.
ciao.

balfaz Profilo | Expert

boh!!!, magari è una strada più lunga ma l'importante è che quello che deve fare lo faccia bene, veramente ogni cervello è un universo d'idee
ben fatto!!!
Dove troverai sempre una mano disposta ad aiutarti è nell'estremo del tuo proprio braccio

cosmopsis Profilo | Junior Member

Grazie. Che dici merita un click su accetta o no???
ciao
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5