|
Implementing HttpHandler for fetching image from
Database:
Create HttpHandler with name ImageHandler.ashx for fetching
the image from database. Read my article about implementing an HttpHandler that
fetches the image from the database by taking imageID as query string here. To
display an image by calling the HttpHandler will be,
ImageHandler.ashx?ImID=100
ImageHandler.ashx implementation will be,
<%@ WebHandler Language="C#"
Class="ImageHandler" %>
using System;
using System.Web;
using System.Configuration;
using System.Data.SqlClient;
public class ImageHandler : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string imageid = context.Request.QueryString["ImID"];
SqlConnection connection = new
SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
connection.Open();
SqlCommand command = new SqlCommand("select Image from Image where
ImageID="+imageid, connection);
SqlDataReader dr = command.ExecuteReader();
dr.Read();
context.Response.BinaryWrite((Byte[])dr[0]);
connection.Close();
context.Response.End();
}
public bool IsReusable {
get {
return false;
}
}
}
We will move to the implementation of Gridview to display the
image using the above HttpHandler.
Binding it to a Gridview:
1) Drag
a Gridview into the WebForm and name it as gvImages,
2) Use
the following code for binding the Gridview,
SqlConnection connection = new
SqlConnection(ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString);
SqlCommand command = new SqlCommand("SELECT imagename,ImageID from
[Image]", connection);
SqlDataAdapter ada = new SqlDataAdapter(command);
ada.Fill(dt);
gvImages.DataSource = dt;
gvImages.DataBind();
Gridview HTML will be,
<asp:GridView Width="500px"
ID="gvImages" runat="server"
AutoGenerateColumns="False" >
<Columns>
<asp:BoundField HeaderText = "Image Name"
DataField="imagename" />
<asp:TemplateField HeaderText="Image">
<ItemTemplate>
<asp:Image ID="Image1" runat="server" ImageUrl='<%#
"ImageHandler.ashx?ImID="+ Eval("ImageID") %>'/>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
|