2011-05-17 35 views
8

Tengo una vista de cuadrícula. su fuente de datos es una tabla de datos que se carga desde la base de datos. En esta vista de cuadrícula, tengo una columna de plantilla. El contenido de esta columna no se extrae directamente de la base de datos, sino que, en cambio, utilizo la identificación del elemento actual para crear un nombre y buscar ese nombre en un directorio de imágenes. El campo de la plantilla es:if instrucción en la plantilla gridview presentada

<asp:TemplateField> 
    <itemtemplate> 
     <img src='../user/images/<% =itemType %><%# DataBinder.Eval(Container.DataItem, "id") %>.jpg?' 
      alt='<%# DataBinder.Eval(Container.DataItem, "Title") %>' /> 
    </itemtemplate> 
</asp:TemplateField> 

No todos los elementos tienen imágenes, por lo que me gustaría verificar si este archivo existe. Si lo hace, me gustaría utilizar el código anterior para colocarlo, si no me gustaría dejar el campo vacío. En el archivo .cs, se trata de una sentencia if con la condición establecida en File.Exist(). Pero no pude encontrar la sintaxis para hacerlo en el archivo .aspx. ¿Es esto posible y, de ser así, cómo? Gracias.

Respuesta

5

puede codificar este comportamiento en el evento RowDataBound. somethink como lo de abajo

Recuerde que la imagen runat = "server"

protected void GridViewProducts_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if(e.Row.RowType = DataControlRowType.DataRow){ 
    if(!File.Exist(yourFileName){ 
     //hide the image 
     var img=e.Row.FindControl("theImageId"); 
     img.visible=false; 
    } 
    } 
} 

Creo que hay que ir por la solución anterior.

de todos modos sólo añadir el siguiente

<asp:TemplateField> 
    <itemtemplate> 
     <img src='../user/images/<% =itemType %><%# DataBinder.Eval(Container.DataItem, "id") %>.jpg?' 
      alt='<%# DataBinder.Eval(Container.DataItem, "Title") %>' 
    <%= File.Exists("yourFileName")? string.Empty : "style='display: none'" %> /> 
    </itemtemplate> 
</asp:TemplateField> 
+0

Massimiliano que tomaron su acercamiento y funcionó, gracias. Aún así, esta solución está nuevamente en el archivo de código subyacente y aún no se ha demostrado cómo hacer esas cosas en el archivo aspx. Entonces, aunque te voté, no marqué la pregunta como respondida. – turzifer

+0

He editado mi respuesta –

+0

Sí, ya lo hice. Gracias. – turzifer

0

etiqueta img ha un evento llamado onerror. Entonces, si su requisito es hacer algo si la imagen no se encuentra, haga algo como esto.

onerror = "this.src = 'Imágenes/Default.png'"