Inserire Immagini in gridview da codice

venerdì 19 settembre 2008 - 16.25

stuzzo Profilo | Junior Member

Ciao a tutti!
Vi illustro il mio problema odierno:
- Ho una gridview da riempire con dati provenienti dal DB..e fin qui nessun problema..
Il problema sorge nel popolare la prima colonna, che dovrei inserirla da codice. Questa colonna viene popolata da un'icona che varia a seconda di una determinata condizione, non solo... se questa condizione si verifica l'immagine deve fungere anche da collegamento, altrimenti devo caricare un'immagine di default non cliccabile.
Sapreste darmi una mano???
Ovviamente per altre informazioni, non esitate a contattarmi.
Ciao e grazie!!

paoval72 Profilo | Senior Member

Ciao.
ma questa prima colonna c'è sempre e il problema sta nel cambiare di volta in volta l'immagine, oppure dovrebbe essere inserita a runtime, se esiste almeno un dato?

PV

stuzzo Profilo | Junior Member

>Ciao.
>ma questa prima colonna c'è sempre e il problema sta nel cambiare
>di volta in volta l'immagine, oppure dovrebbe essere inserita
>a runtime, se esiste almeno un dato?
>
>PV

Ciao,
questa colonna è sempre presente.
Quando carico i dati dal DB, devo verificare una condizione.
Se verificata, devo mettere un'immagine alla quale devo anche assegnare la gestione di un evento,
altrimenti, devo mettere un'altra immagine normale.

Nello specifico, se la condizione viene verificata, devo inserire un'immagine che cliccandoci sopra si avvia un video, in un placeholder di fianco al gridview, altrimenti devo inserire un'immagine non linkabile (per indicare che il video non ci sta).

Spero di essere stato più chiaro
:)

paoval72 Profilo | Senior Member

Allora puoi agire sull'evento RowDataBound. Così alla veloce: per ogni riga controlli la condizione: se c'è visualizzi un imagebutton e gli setti gli attributi e gli eventi, altrimenti attivi una semplice image, senza eventi.
Che ne dici?
PV

stuzzo Profilo | Junior Member

>Allora puoi agire sull'evento RowDataBound. Così alla veloce:
>per ogni riga controlli la condizione: se c'è visualizzi un imagebutton
>e gli setti gli attributi e gli eventi, altrimenti attivi una
>semplice image, senza eventi.
>Che ne dici?
>PV

Beh direi che sia proprio ciò che mi serve, adesso mi documento meglio su come gestire questo evento...
Scusa ma come faccio ad aggiungere questa colonna? specificando anche che debba essere la prima?

Grazie della tua pazienza!

paoval72 Profilo | Senior Member

hai un esempio del codice html del gridview da postare?
PV

stuzzo Profilo | Junior Member

Ciao,
allora posto l'html del gridview:
<asp:GridView ID="gvOfferte" runat="server" AllowPaging="True" AutoGenerateColumns="False" ShowFooter="false" OnPageIndexChanging="gvOfferte_PageIndexChanging" OnRowDataBound="gvOfferte_RowDataBound" DataKeyNames="IDAnnuncio">
<Columns>
<asp:TemplateField HeaderText="Video">
<ItemTemplate >
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Data Inserimento">
<ItemTemplate>
<asp:Label ID="lblDataInserimento" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "DataInserimento", "{0:d}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Descrizione Annuncio">
<ItemTemplate>
<a href='<%# hRefAnnuncio(DataBinder.Eval(Container.DataItem, "IDAnnuncio") + "") %>'>
<asp:Label ID="lblAnnuncio" runat="server" Text='<%# TroncaStringa(DataBinder.Eval(Container.DataItem, "Titolo") +"" ) %>'></asp:Label></a>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Candidati">
<ItemTemplate>
<asp:ImageButton ID="imbCandidati" runat="server" ImageUrl="~/img/det_segnala.gif"/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerSettings Mode="Numeric" Position="Bottom" PageButtonCount="3" />
</asp:GridView>

mentre questo è il code behind:
protected void gvOfferte_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (condizione)
{
//qui devo associare a l'immagine l'evento di far partire un video
}
else
{
//non devo fare niente, solo metterci un'immagine a mo' di icona non cliccabile
}

}

La colonna con Header Text="Video" è la colonna in questione.
per assegnale l'evento? devo fare una cosa del tipo xxxx.addControl(qualcosa) oppure non c'entra niente ?

Grazie a tutti :)

paoval72 Profilo | Senior Member

Premesso che condivido in pieno la proposta del Coach Marco qui sopra (rapida e a prova di errore, visto che almeno un controllo c'è sempre), ti propongo anche l'inserimento a runtime di un controllo (premetto che è asp):

protected void gv1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow gwr = (GridViewRow)e.Row;
if (gwr.RowType == DataControlRowType.DataRow)
{
ImageButton imnew = new ImageButton();//istanzio un nuovo oggetto imagebutton
imnew.ImageUrl="/images/select_arrow_right.gif";//gli assegno attributi, in questo caso l'url dell'immagine
imnew.CommandArgument = Convert.ToString( gwr.RowIndex); //aggiungo l'idice di quella riga nel suo attributo command, convertendo l'int
dell'indice in string
if(tuacondizione == vera)
{
imnew.Click += new System.Web.UI.ImageClickEventHandler(this.ApriImg);/7registro l'evento click
}
else
{
imnew.Attributes["OnClick"] = "return false;"; //disabilito il click, simulando un falso click
}
gwr.Cells[0].Controls.Add(imnew); //aggiungo il bottone alla cella vuota: in questo caso è la prima colonna
}

private void ApriImg(object sender, System.Web.UI.ImageClickEventArgs e)//evento del click, creato da me
{
Response.Redirect("WebForm2.aspx"); //faccio la mia redirect o quel che deve fare
}

Spero ti possa essere utile.
Ciao,

Paolo
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