GidView: BoundField nascosto

giovedì 19 giugno 2008 - 17.27

4mane Profilo | Junior Member

Salve a tutti,vi espongo subito Il problema.

Devo intercettare il valore di una cella nella funzione _RowDataBound di una GridView, ed in base a tale valore, impostare un'immagine contenuta in un opportuno ItemTemplate.
Tutto fila liscio sino a quando la proprietà Visible del BoundField è impostata a True: quando la passo a False, il valore che mi ritorna è nullo.
Vi posto il codice:

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Qualcuno sà come ovviare a tale problema?
Grazie!

tammy16 Profilo | Newbie

>Salve a tutti,vi espongo subito Il problema.
>
>Devo intercettare il valore di una cella nella funzione _RowDataBound
>di una GridView, ed in base a tale valore, impostare un'immagine
>contenuta in un opportuno ItemTemplate.
>Tutto fila liscio sino a quando la proprietà Visible del BoundField
>è impostata a True: quando la passo a False, il valore che mi
>ritorna è nullo.
>Vi posto il codice:
>
>Protected Sub gvSegnalazioni_RowDataBound(ByVal sender As Object,
>ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles
>gvSegnalazioni.RowDataBound
> Dim img As New Image
>
> If e.Row.RowType = DataControlRowType.DataRow Then
>
> If e.Row.Cells(7).Text = "0" Then
> img.ImageUrl = "Images/webno.png"
> img.ToolTip = "Non online"
> Else
> img.ImageUrl = "Images/webyes.png"
> img.ToolTip = "Online"
> End If
> e.Row.Cells(5).Controls.Add(img)
>
> End If
>
>End Sub
>
>
>Qualcuno sà come ovviare a tale problema?
>Grazie!


Ciao..
allora secondo me dovresti fare così: prima di impostare a false il valore del campo, metti questo valore in un hiddenfield e poi imposti visible del BoundField a false.. vedrai che così dovrebbe andare!!!
In teoria se metti la proprietà visible a false quel campo è come se non ci fosse, invece l'hiddenfield è si un campo nascosto ma permette di lavorarci tranquillamente!!
fammi sapere
tammy

4mane Profilo | Junior Member

Ciao Tammy, ho provato a fare come dici tu scrivendo come ultima istruzione:

e.Row.Cells(7).Visible = False

ma rimane poi uno spazio vuoto nella relativa colonna della GridView.

In ogni modo, pur utilizzando un ItemTemplate che contiene a sua volta un HiddenField, come faccio da codice ad associargli il valore che viene "bindato" da un datareader? In poca sostanza, se nella funzione _RowDataBound riuscissi ad intercettare tale valore, farei a meno del BoundField che attualmente stò utilizzando...

tammy16 Profilo | Newbie

Allora io i datareader non li ho mai usati..però al posto tuo io mi ricaverei il valore che mi serve dal database quindi facendo la solita connessione da codice e poi lo estrarrei con executescalar..credo che potrebbe essere un'idea!!!
fammi sapere se potrebbe andare bene.. e se hai bisogno di sapere di +.. tammy

rossimarko Profilo | Guru

>Ciao Tammy, ho provato a fare come dici tu scrivendo come ultima
>istruzione:
>
>e.Row.Cells(7).Visible = False
>
>ma rimane poi uno spazio vuoto nella relativa colonna della GridView.
>
>In ogni modo, pur utilizzando un ItemTemplate che contiene a
>sua volta un HiddenField, come faccio da codice ad associargli
>il valore che viene "bindato" da un datareader? In poca sostanza,
>se nella funzione _RowDataBound riuscissi ad intercettare tale
>valore, farei a meno del BoundField che attualmente stò utilizzando...


Per accedere al valore associato alla riga da codice devi accedere alla proprietà DataItem:
e.Row.DataItem
vedrai che all'interno di questa variabile hai l'oggetto che contiene i dati.

Se usi come datasource una datatable allora il dataItem conterrà una datarowview:
DataRowView drv = (DataRowView)e.Row.DataItem;

oppure se usi un datareader controlla in debug il tipo di oggetto contenuto nel dataitem
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

4mane Profilo | Junior Member

Grazie Marco!

In effetti si trattava di un DataTable e con il metodo DataItem da te indicato, evito di creare un BoundField in più nella GridView.
Grazie anche a te Tammy per i consigli che mi hai dato.

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