Problème d'affichage des images sur le gridview

azertsissmail Messages postés 3 Date d'inscription mardi 15 avril 2014 Statut Membre Dernière intervention 3 août 2014 - 29 mai 2014 à 18:22
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 - 19 juin 2014 à 14:45
Bonjour, je développe actuellement un site web avec le langage asp.net et j'ai un problème au niveau de l'affichage des images enregistrées dans une base de donnée sqlserver, j'ai lié le gridview avec une source de donnée en utilisant le paramétrage du gridview, je n'ai écris aucun code dans la pageload, et quand j'exécute le programme tous les champs s'affichent sans le champ "image", aidez moi s'il vous plait le plus tôt possible et merci.

1 réponse

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
19 juin 2014 à 14:45
Salut,

il y a 2 façons de faire,

la plus simple est de renvoyer des balises images déjà formatées depuis ta base de données,
par exemple si tu stocke les noms des images dans ta table et ces images sont positionnées sur le site web sous /images/,
ta requete renverra quelque chose comme ça :
select 
    tbl.ID as 'ID', 
    '<img src="/images/' + tbl.IMG + '" />' as 'IMG'
from ma_table tbl
where .... 


La liaison Bind avec le GridView se fera comme si c'était un champ texte mais le navigateur affichera l'image. (Rajouter la directive de page ValidateRequest=false)


Le 2ème solution correspond au cas ou tes images sont stockées réellement en base de données (format binary), dans ce cas tu devras utiliser une page intermédiaire afin de renvoyer le flux d'octets dans la balise <img>
Comme si tu écrivais :
<img src="0xA0B000000FF00000FF0000AEBEC98E ... ect ..." />


// Dans la déclaration du GridView
// On mettra dans la colonnes Template la référence à l'ID 
// de l'image à renvoyer en utilisant la page LoadImage.aspx
<asp:TemplateField HeaderText="Picture">
<ItemTemplate>
    <img src="LoadImage.aspx?id=<%# Eval("ID").ToString() %>" width="50" height="50" />
</ItemTemplate>
</asp:TemplateField>



Lors du Bind, la page GetImage.aspx est appelée, elle devra renvoyer le Stream binaire de l'image
(On peut faire ça avec un Handdler ashx ou une simple page aspx)

//voici la page aspx :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoadImage.aspx.cs" Inherits="LoadImage" %>

//et code behind :
using System.IO;
public partial class LoadImage : System.Web.UI.Page
{
	protected void Page_Load(object sender, EventArgs e)
	{
		string sID = Request.QueryString["ID"];

		// Recup en base selon ID 

		// ou en fichier (montré ici car plus simple)
		string fullPath = "D:\site\images\img_" + sID + ".jpg";
		FileStream fileStream = new FileStream(fullPath, FileMode.Open);
		long fileSize = fileStream.Length;
		byte[] buffer = new byte[fileSize];
		fileStream.Read(buffer, 0, (int)fileSize);
		fileStream.Close();

		Response.BinaryWrite(buffer); // en base ou en fichier, faire un BinaryWrite
	}
}



bye...
0
Rejoignez-nous