结合ashx来在DataGrid中显示从数据库中读出的图片

原创 2004年09月21日 18:53:00

 

有关ashx后缀名的文件请看 消除图片在ie中缓存而无法更新的问题 相关文章

从数据库中读取和保存图片请看 写入和读取图片(c# asp。net sqlserver) 相关文章

 

下面利用ashx文件可以方便实现从数据库中读取图片并显示在datagrid当中

 

//---------------------------------------BindImage.aspx ----------------------------------------

<%@ Page language="c#" Codebehind="BindImage.aspx.cs" AutoEventWireup="false" Inherits="ShowImage.BindImg" %>
<HTML>
 <HEAD>
  <title>BindImg</title>
 </HEAD>
 <body>
  <form id="Form1" method="post" runat="server">
   <FONT face="宋体">
    <asp:DataGrid id="MyDataGrid" runat="server" AutoGenerateColumns="False" Width="632px">
     <AlternatingItemStyle BackColor="Beige"></AlternatingItemStyle>
     <HeaderStyle HorizontalAlign="Center"></HeaderStyle>
     <Columns>
      <asp:TemplateColumn HeaderText="Photo">
       <ItemTemplate>
        <img src='<%# "GetImage.ashx?ID="+DataBinder.Eval(Container.DataItem,"EmployeeID")%>'>
       </ItemTemplate>
      </asp:TemplateColumn>
      <asp:BoundColumn DataField="LastName" HeaderText="Last Name"></asp:BoundColumn>
      <asp:BoundColumn DataField="FirstName" HeaderText="First Name"></asp:BoundColumn>
      <asp:BoundColumn DataField="title" HeaderText="Title"></asp:BoundColumn>
     </Columns>
    </asp:DataGrid></FONT>
  </form>
 </body>
</HTML>

<%@ Page language="c#" Codebehind="BindImage.aspx.cs" AutoEventWireup="false" Inherits="ShowImage.BindImage" %>

//------------------------------------BindImage.aspx.cs ---------------------------------------------

P>using System;
using System.Data;
using System.Drawing;
using System.Web; using System.Data.SqlClient;

namespace ShowImage
{
 ///


 /// BindImg 的摘要说明。
 ///

 public class BindImage: System.Web.UI.Page
 {
  protected System.Web.UI.WebControls.DataGrid MyDataGrid;
 
  private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if(!Page.IsPostBack)
   {
    SqlConnection conn = new SqlConnection(@"Server=shoutor/mydb;database=northwind;uid=sa;Pwd=shoutor");
    try
    {
     conn.Open();
     SqlCommand cmd = new SqlCommand("select employeeID,lastname,firstname,title from employees",conn);
     SqlDataReader reader = cmd.ExecuteReader();
     MyDataGrid.DataSource = reader;
     MyDataGrid.DataBind();
    }
    finally
    {
     conn.Close();
    }
   }
  }
  #region Web 窗体设计器生成的代码
  override protected void OnInit(EventArgs e)
  {
   //
   // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
   //

   InitializeComponent();
   base.OnInit(e);
  }
  
  ///
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  ///

  private void InitializeComponent()
  {   
   this.Load += new System.EventHandler(this.Page_Load);
  }
  #endregion
 }
}

//-----------------------------GetImage.ashx ---------------------------------------

<%@ WebHandler Language="C#" Class="ShowImage.GetImage" CodeBehind="GetImage.ashx.cs" %>

 
//--------------------------------GetImage.ashx.cs----------------------------------

using System;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

namespace ShowImage
{
 ///


 /// GetImg 的摘要说明。
 ///

 public class GetImage : IHttpHandler
 {
  public void ProcessRequest(HttpContext context)
  {
   string id = (string)context.Request["id"];
   if(id!=null)
   {
    MemoryStream stream = new MemoryStream();
    SqlConnection conn = new SqlConnection(@"Server=;database=;uid=;Pwd=");
    Bitmap bm = null;
    Image image = null;
    try
    {
     conn.Open();
     SqlCommand cmd = new SqlCommand("select photo from employees where employeeid='"+id+"'",conn);
     byte[] blob = (byte[])cmd.ExecuteScalar();
     stream.Write (blob,78,blob.Length-78);
     bm = new Bitmap(stream);

     int width=48;
     int height = (int)(width*((double)bm.Height/(double)bm.Width));


     // GetThumbnailImage生成缩略图
     image = bm.GetThumbnailImage(width,height,null,IntPtr.Zero);

     context.Response.ContentType = "image/jpeg";

     image.Save(context.Response.OutputStream,ImageFormat.Jpeg);
    }
    finally
    {
     if(image!=null)
      image.Dispose();
     if(bm!=null)
      bm.Dispose();
     stream.Close();
     conn.Close();
    }
   }
  }
  
  public bool IsReusable
  {
   get
   {
    return true;
   }
  }  
 }
}

ProcessRequest使用了空架类库的易用的Image.GetThumbnailImage方法来把位图缩小到宽度为48像素,同时保持图象的长宽比。可以使用类似的技术来创建显示来自其他数据库图象的DataGrid。基本的思想是使用模板列来输出一个引用某个HTTP处理句柄的<img>标签,并在查询字符串中包含唯一标识图片所在的记录的信息。之后,HTTP处理句柄使用ADO.NET来获取图象数据位,并使用GDI+(图象设备接口+)来构建图象。

结合ashx来在DataGrid中显示从数据库中读出的图片

作者:木子  http://blog.csdn.net/derny/下面利用ashx文件可以方便实现从数据库中读取图片并显示在datagrid当中 //------------------------...
  • 21aspnet
  • 21aspnet
  • 2004年10月26日 19:00
  • 2656

存在数据库里的图片直接显示到PictureBox中

如果把图片作为Image类型存入数据库,当需要从数据库里调出显示的时候并不需要创建任何临时文件,可以利用pictureBox1.Image = System.Drawing.Image.FromStr...
  • ki1381
  • ki1381
  • 2007年03月04日 20:29
  • 3025

struts保存图片到数据库 ,从数据库中读取图片显示到页面

1、数据结构: CREATE TABLE [photo] (  [id] [int] IDENTITY (1, 1) NOT NULL ,  [ordernumber] [nvarchar] (...
  • ynztpwl
  • ynztpwl
  • 2012年04月16日 21:08
  • 2227

Java 中以DataGrid形式显示数据库查询结果和相关JTable操作程序

import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.sql.*;import java.util.*;...
  • migeonline
  • migeonline
  • 2005年09月28日 00:07
  • 2896

C# 数据库中图像信息的读取与写入

一、将图像的二进制形式保存到数据库中   二、从数据库中读取图像的二进制信息,并将图像保存到指定的物理位置 三、从数据库中读取图像的二进制信息,并将图像显示在windows窗体中 方法...
  • susan19890313
  • susan19890313
  • 2011年10月11日 21:12
  • 913

Easyui获取数据库date数据的显示

众所周知Oracle数据库中的date与众不同,在Easyui中显示数据库的date类型如果不经过转化为显示为Object。因此需要经过处理。 1、首先你要写转化date的JavaScript f...
  • lhq13400526230
  • lhq13400526230
  • 2013年09月30日 12:21
  • 3598

Jsp 读取oracle数据库图片,显示出来

Jsp 读取oracle数据库图片,显示出来
  • u011850863
  • u011850863
  • 2015年03月12日 09:12
  • 965

PHP给Mysql数据库中上传图片,并从Mysql数据库读取图片显示在后台窗口

后台界面代码: 客户案例管理 body{ font-size:14px;} input{ vertical-align:middle; margin:0; padding...
  • escdelete
  • escdelete
  • 2013年11月25日 11:54
  • 2025

Android ListView控件显示数据库中图片

Android中ListView是比较常用的控件,但一直都觉得创建ListView步骤有点繁琐,故在此总结一下,方便查阅。程序效果是实现一个显示联系人的简单信息。使用ListView控件,数据有姓名,...
  • chaozhung
  • chaozhung
  • 2013年06月04日 08:41
  • 3424

如何用c#连接到oracle数据库并用DataGrid把表中字段显示出来

 最近比较烦,我想用c#连接oracle数据库,并用DataGrid把表中字段值显示出来。在网上也查了很多,就是测试不成功,请路过的好心人,并且熟悉这方面知识的,给我写一下详细的实现过程!在此感谢!...
  • zhulin902
  • zhulin902
  • 2006年12月14日 18:14
  • 1184
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:结合ashx来在DataGrid中显示从数据库中读出的图片
举报原因:
原因补充:

(最多只允许输入30个字)