Imagefield in gridview asp net

martedì 17 luglio 2012 - 10.10
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  SQL Server 2008 R2  |  Chrome  |  Javascript

trinity Profilo | Guru

Ciao buongiorno,

allora ragazzi in un db sql ho una tabella nella quale vi è un campo chiamato esente_imposta.
Questo campo a seconda delle circostanze può avere valore =0 oppure =1.
Io i record in una pagina aspx li visualizzo in una gridview e vorrei aggiungere un campo imagefiled che mi carica un'immagine che stabilisco io solo se il valore del campo esente_imposta del db sia pari a 0.
Adesso l'utilizzo dell'imagefield nel mio caso è giusto? Se si come faccio a dire via codice di caricare o no l'immagine a seconda del valore che mi passa il database?

in rete ho trovato un codice del genere:

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

dove suppongo che la proprietà visible dell'immagine viene gestita da codice ma nel mio caso posso ottenere il valore via codice vb net

Ciao e grazie in anticipo
Cirillo Fabio
www.wondernet.biz
fabio@wondernet.biz
http://blogs.dotnethell.it/fabiocirillo/
http://wnetsoftware.blogspot.com

skraus Profilo | Junior Member

Io sostituirei il campo ImageField con un TemplateField. Nell'ItemTemplate inserirei un controllo image e poi sfruttando l'evento RowDataBound del gridView andrei a gestire la valorizzazione dell'istanza dell'ImageControl.

Ciao
Sk

trinity Profilo | Guru

Scusa ma se inserisco un templatefield da wizard non c'è un'opzione che gestisce gli itemtemplate.
Mica puoi postarmi qualche esempio?

Ciao e grazie


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

skraus Profilo | Junior Member

Lascia perdere i wizard. Sul GridView che hai già sulla tua pagina, apri il menù delle Attività di GridView seleziona la voce Modifica Colonne, quindi seleziona bal riquadro in alto a sx TemplateField e fai clic sul tasto aggiungi (usa i tasti freccia per posizionarlo nella giusta sequenza) e conferma il tutto facendo Clic sul tasto Ok.


348x329 33Kb



515x419 45Kb


A questo punto, sempre dal menù Attività di GridView, seleziona la voce Modifica modelli (seleziona il campo nel caso tu avessi + colonne template nella griglia) selezionando l'ItemTemplate ed inserisci il controllo Image nel Template a video.


496x157 19Kb


A questo punto procedi con l'inserimento del codice nell'evento RowDataBound.

Ciao
Sk

Geronimo79 Profilo | Junior Member

Prova un codice tipo questo:

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

Facci sapere.
Un saluto.

skraus Profilo | Junior Member

Ti invio un esempio completo.

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) { //in questo modo escludo la riga di intestazione if (e.Row.RowType == DataControlRowType.DataRow) { /* nel caso in cui la colonna che contiene i valori 0 e 1 non fosse visibile DataRowView dsRow = (DataRowView)e.Row.DataItem; string curValue = dsRow["flag"].ToString(); */ string curValue = e.Row.Cells[1].Text; Image curImgCtrl = (Image)e.Row.FindControl("Image1"); if (curValue == "0") { curImgCtrl.ImageUrl = "~/img/cancel.png"; } else { curImgCtrl.ImageUrl = "~/img/confirm.png"; } } }

L'evento rowDataBound si replica in automatico al binding di orgni row del GridView rispetto al DataBound proposto da Geronimo che avviene una sola volta.

Ti allego anche il file.

Facci sapere se hai risolto.

Ciao
Sk

trinity Profilo | Guru

Prima di tutto grazie per l'aiuto che mi state dando, volevo dire nella grid view devo solamente aggiungere un'immagine senza fare nessuno controllo se un campo è =0 o =1, calcolando che la prima colonna contiene già un itemtemplate che è una checkbox allora ho aggiunto come da voi consigliato un altro templatefield e all'interno dell'item ho messo l'immagine.
Caricata l'immagine nell'apposita cartella ho scritto il tuo codice così:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

ma sulla imageurl mi genera questo errore: Riferimento a un oggetto non impostato su un'istanza di oggetto.

dove sbaglio?

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

skraus Profilo | Junior Member

>Protected Sub gw_Arrivati_Oggi_RowDataBound(ByVal sender As Object,
>ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles
>gw_Arrivati_Oggi.RowDataBound
> If e.Row.RowType = DataControlRowType.DataRow Then
>Dim curImgCtrl As Image = DirectCast(e.Row.FindControl("Image1"),
>Image)
> curImgCtrl.ImageUrl = "~/immagini/person.png"
> End If
> End Sub
>
>ma sulla imageurl mi genera questo errore: Riferimento a un oggetto
>non impostato su un'istanza di oggetto.
>
>dove sbaglio?

L'errore molto probabilmente è dovuto al fatto che il metodo findControl non trova l'istanza del controllo Image denominata "Image1".

Però se il file grafico da associare è sempre lo stesso per tutti i record, puoi assegnare il valore alla proprietà ImageUrl del controllo Image contenuto nella colonna template del gridview direttamente da design e non ti serve scrivere nemmeno una riga di codice.

>Ciao

Ciao
Sk

trinity Profilo | Guru

In effetti ho fatto così però vorrei capire l'errore in quanto su un'altra gridview devo gestire il tipo di immagine a seconda del valore di una colonna proprio come nel tuo esempio.

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

skraus Profilo | Junior Member

Da quello che hai postato non saprei darti più indicazioni di quelle già fornite. Dovrei vedere la pagina nel suo insieme.

Ciao
Sk

Geronimo79 Profilo | Junior Member

Se vuoi cambiare immagine in base al valore di una colonna prova così che funziona 100% (è riferito a un imagebutton ma lo adatti tranquillamente a ciò che ti serve):

Dim j As Image For index As Integer = 0 To Me.GridView1.Rows.Count - 1 If GridView1.Rows(index).Cells(9).Text = 1 Then j = GridView1.Rows(index).Cells(10).FindControl("ImageButton2") j.ImageUrl = "~/images/1.png" End If

Facci sapere.
Un saluto.
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