By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
429,589 Members | 1,209 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 429,589 IT Pros & Developers. It's quick & easy.

Displaying images from a DB using a Repeater control.

P: n/a
Jim
I am trying to display images that are stored in a database, and I am using a
repeater control. What I still use the Response.BinaryWrite method with a
binding expression, if so, what with the code look like?
Nov 19 '05 #1
Share this Question
Share on Google+
7 Replies


P: n/a
Hi Jim,

Can it be so easy? Think I wrong now?

<ItemTemplate>
<asp:Image ID="myImage" Runat="Server" ImageUrl='<%#
Container.DataItem("myColumn") %>'/>
</ItemTemplate>

If I had wrong, want you create the Image or the ImageUrl in Code-Behind?
Nov 19 '05 #2

P: n/a
Hi Jim,

Can it be so easy? Think I wrong now?

<ItemTemplate>
<asp:Image ID="myImage" Runat="Server" ImageUrl='<%#
Container.DataItem("myColumn") %>'/>
</ItemTemplate>

If I had wrong, want you create the Image or the ImageUrl in Code-Behind?
Nov 19 '05 #3

P: n/a
Since you refer to the Response.BinaryWrite method it sounds like you have
your image stored as a BLOb/image/binary column in your db table, and not
simply a path to a jpg or gif in the file system.

If that's the case you need an aspx page that takes an image identifier as a
parameter, gets the BLOb column binary content from the db and delivers it
as the HTTP response using the Response.BinaryWrite method.

Your page also needs to add HTTP headers to tell the browser what kind of
content is coming, known as the "MIME Type", e.g. image/gif or image/jpeg.

In your repeater you add an image (<IMG ... />) with its souce set to the
name of your BLOb handler, and passing the image identifier as a parameter.

<ItemTemplate>
<asp:Image ID="myImage" Runat="Server"
ImageUrl='myBLObHandler.aspx?id=<%#
Container.DataItem("myImageIdentifier") %>' />
</ItemTemplate>

I've done this with all sorts of file content, MP3, Word, Excel, PDF, even
HTML, as well as gif, jpg and png images to avoid hassle over file system
resources and write permissions, etc.

"Jim" <Ji*@discussions.microsoft.com> wrote in message
news:BB**********************************@microsof t.com...
I am trying to display images that are stored in a database, and I am using
a
repeater control. What I still use the Response.BinaryWrite method with a
binding expression, if so, what with the code look like?

Nov 19 '05 #4

P: n/a
Since you refer to the Response.BinaryWrite method it sounds like you have
your image stored as a BLOb/image/binary column in your db table, and not
simply a path to a jpg or gif in the file system.

If that's the case you need an aspx page that takes an image identifier as a
parameter, gets the BLOb column binary content from the db and delivers it
as the HTTP response using the Response.BinaryWrite method.

Your page also needs to add HTTP headers to tell the browser what kind of
content is coming, known as the "MIME Type", e.g. image/gif or image/jpeg.

In your repeater you add an image (<IMG ... />) with its souce set to the
name of your BLOb handler, and passing the image identifier as a parameter.

<ItemTemplate>
<asp:Image ID="myImage" Runat="Server"
ImageUrl='myBLObHandler.aspx?id=<%#
Container.DataItem("myImageIdentifier") %>' />
</ItemTemplate>

I've done this with all sorts of file content, MP3, Word, Excel, PDF, even
HTML, as well as gif, jpg and png images to avoid hassle over file system
resources and write permissions, etc.

"Jim" <Ji*@discussions.microsoft.com> wrote in message
news:BB**********************************@microsof t.com...
I am trying to display images that are stored in a database, and I am using
a
repeater control. What I still use the Response.BinaryWrite method with a
binding expression, if so, what with the code look like?

Nov 19 '05 #5

P: n/a
Jim
Thanks Brian, but I am a little confused on how to use the
Response.BinaryWrite from the code behind when the method is called from the
repeater control. What would the method look like in the code behind?

Thanks for your help,
Jim

"Brian Lowe" wrote:
Since you refer to the Response.BinaryWrite method it sounds like you have
your image stored as a BLOb/image/binary column in your db table, and not
simply a path to a jpg or gif in the file system.

If that's the case you need an aspx page that takes an image identifier as a
parameter, gets the BLOb column binary content from the db and delivers it
as the HTTP response using the Response.BinaryWrite method.

Your page also needs to add HTTP headers to tell the browser what kind of
content is coming, known as the "MIME Type", e.g. image/gif or image/jpeg.

In your repeater you add an image (<IMG ... />) with its souce set to the
name of your BLOb handler, and passing the image identifier as a parameter.

<ItemTemplate>
<asp:Image ID="myImage" Runat="Server"
ImageUrl='myBLObHandler.aspx?id=<%#
Container.DataItem("myImageIdentifier") %>' />
</ItemTemplate>

I've done this with all sorts of file content, MP3, Word, Excel, PDF, even
HTML, as well as gif, jpg and png images to avoid hassle over file system
resources and write permissions, etc.

"Jim" <Ji*@discussions.microsoft.com> wrote in message
news:BB**********************************@microsof t.com...
I am trying to display images that are stored in a database, and I am using
a
repeater control. What I still use the Response.BinaryWrite method with a
binding expression, if so, what with the code look like?


Nov 19 '05 #6

P: n/a

"Jim" <Ji*@discussions.microsoft.com> wrote in message
news:FC**********************************@microsof t.com...
Thanks Brian, but I am a little confused on how to use the
Response.BinaryWrite from the code behind when the method is called from
the
repeater control. What would the method look like in the code behind?


Step back. There's no need to do it all in one page. In any web page the
HTML gets served in response to the first request for the URL and the
browser then makes further requests to collect any referenced resources,
like stylesheets, scripts, or images.

We're dealing with two separate aspx pages now.

You have one page, lets call it mainpage.aspx that includes a repeater that
includes repeated instances of the image...
<ItemTemplate>
<asp:Image ID="myImage" Runat="Server"
ImageUrl='myBLObHandler.aspx?id=<%#
Container.DataItem("myImageIdentifier") %>' />
</ItemTemplate>


The only code that gets called in this page is the databinding to get the
<img ... /> tag rendered once for each data row in the data source. This
results in:
<img src='myBLObHandler.aspx?id=1' />
<img src='myBLObHandler.aspx?id=2' />
<img src='myBLObHandler.aspx?id=...' />
<img src='myBLObHandler.aspx?id=n' />

This goes out as the normal text output to the response stream. The
receiving browser renders the HTML and picks up references to source files
for four images so makes requests back to your server for each image.

This is where the second file comes in.

You need an aspx page called myBLObHandler.aspx to handle the request.

This page has no HTML, its purely code behind.

The code takes the id given in the parameters, uses it to extract the
required binary content from the db, and then streams that binary content
back using Response.BinaryWrite()

Clear?

Brian Lowe
---------@
Nov 19 '05 #7

P: n/a
Jim
OK. I understand that and why it works. However, when I use the following
code that brings back the content type and image data from the database in a
data set it only displays a blank image with the dreaded red "x".

DataSet ds = new DataSet ();
ds =
objTest.RetrieveTestImage(Convert.ToInt32(Request. QueryString["id"]));
foreach (DataRow dr in ds.Tables [0].Rows) {
Response.ContentType= dr ["strType"].ToString();
Response.BinaryWrite((byte [])dr ["imgTestImage"]);
}

I know that there is data in all of my fields, because I printed them out as
a string in the browser except for the image data where I printed out the
length of the byte array. Any ideas?

"Brian Lowe" wrote:

"Jim" <Ji*@discussions.microsoft.com> wrote in message
news:FC**********************************@microsof t.com...
Thanks Brian, but I am a little confused on how to use the
Response.BinaryWrite from the code behind when the method is called from
the
repeater control. What would the method look like in the code behind?


Step back. There's no need to do it all in one page. In any web page the
HTML gets served in response to the first request for the URL and the
browser then makes further requests to collect any referenced resources,
like stylesheets, scripts, or images.

We're dealing with two separate aspx pages now.

You have one page, lets call it mainpage.aspx that includes a repeater that
includes repeated instances of the image...
<ItemTemplate>
<asp:Image ID="myImage" Runat="Server"
ImageUrl='myBLObHandler.aspx?id=<%#
Container.DataItem("myImageIdentifier") %>' />
</ItemTemplate>


The only code that gets called in this page is the databinding to get the
<img ... /> tag rendered once for each data row in the data source. This
results in:
<img src='myBLObHandler.aspx?id=1' />
<img src='myBLObHandler.aspx?id=2' />
<img src='myBLObHandler.aspx?id=...' />
<img src='myBLObHandler.aspx?id=n' />

This goes out as the normal text output to the response stream. The
receiving browser renders the HTML and picks up references to source files
for four images so makes requests back to your server for each image.

This is where the second file comes in.

You need an aspx page called myBLObHandler.aspx to handle the request.

This page has no HTML, its purely code behind.

The code takes the id given in the parameters, uses it to extract the
required binary content from the db, and then streams that binary content
back using Response.BinaryWrite()

Clear?

Brian Lowe
---------@

Nov 19 '05 #8

This discussion thread is closed

Replies have been disabled for this discussion.