Problème d'affichage des images sur le gridview

Signaler
Messages postés
3
Date d'inscription
mardi 15 avril 2014
Statut
Membre
Dernière intervention
3 août 2014
-
yann_lo_san
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
-
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

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
18
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...