前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >结合ashx来在DataGrid中显示从数据库中读出的图片

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

作者头像
Java架构师必看
发布2021-03-22 11:07:32
3.7K0
发布2021-03-22 11:07:32
举报
文章被收录于专栏:Java架构师必看

作者:木子  http://blog.csdn.net/derny/

下面利用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+(图象设备接口+)来构建图象。

本文由来源 21aspnet,由 javajgs_com 整理编辑,其版权均为 21aspnet 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档