`

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

阅读更多

作者:木子  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
{
 /// <summary>
 /// BindImg 的摘要说明。
 /// </summary>
 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);
  }
  
  /// <summary>
  /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  /// 此方法的内容。
  /// </summary>
  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
{
 /// <summary>
 /// GetImg 的摘要说明。
 /// </summary>
 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中显示数据库中图片

    在IT领域,尤其是在Web开发中,结合ASHX处理程序与DataGrid控件来显示数据库中的图片是一项常见且实用的技术。本文将深入解析如何利用ASHX技术在DataGrid中展示存储于数据库中的图像数据,以及其背后的实现原理。 #...

    easyui datagrid ashx 结合的例子,虚拟json数据

    网络上找了好久没找到简单易上手的.net版本的easyui datagrid ashx 结合的.net例子,自己个人实现,后台虚拟json数据,不包含数据库操作,实现了datagrid的增删改,100%可运行(VS2012开发)

    ajax+ashx+分页 包含数据库文件

    【标题】"ajax+ashx+分页 包含数据库文件"所涉及的知识点主要集中在Web开发中的异步数据处理和页面动态加载技术上。这里的"ajax"是"Asynchronous JavaScript and XML"的缩写,是一种在不刷新整个网页的情况下,能够...

    使用Gridview绑定数据库中的图片

    ### 使用Gridview绑定数据库中的图片 #### 背景与目的 在Web应用程序开发中,尤其是在ASP.NET项目中,经常...此外,通过将图片数据存储在数据库中,可以方便地进行备份和恢复操作,这对于保证数据的安全性非常重要。

    ASP.NET DataList 绑定数据库二进制图片

    本文将详细介绍如何将存储在数据库中的二进制图片数据绑定到DataList,以便在网页上进行展示。我们将使用Visual Studio 2010作为开发工具,SQL Server 2008作为数据库管理系统。 首先,我们需要了解如何在数据库中...

    HTML+ASHX上传传图片.zip

    在这个"HTML+ASHX上传传图片"的示例中,我们将探讨如何结合这两种技术实现图片的上传功能。 1. **HTML表单**: HTML用于创建用户界面,其中`&lt;form&gt;`元素是用于文件上传的关键。你需要设置`&lt;input type="file"&gt;`...

    最强图片多选上传示例 可多次多选择可删除可预览 jQuery+Ashx 异步上传

    最强图片上传示例 可多次多选择可删除可预览 jQuery+Ashx 异步上传 史上最强图片上传示例。jQuery+Ashx异步上传,有源代码。 每次可选择多张图片,可多次选择,可预览,上传前可删除已选择的任意图片。 任何时候仅...

    ajax+ashx完整上传图片示例,可回显

    在Web开发中,图片上传是一项常见的功能,而Ajax技术与ASHX(HTTP Handler)结合可以实现异步无刷新的图片上传,并且支持回显显示已上传的图片。下面将详细介绍这个"ajax+ashx完整上传图片示例,可回显"的实现方式。 ...

    C#图片在数据库中的存取

    标题与描述概述的知识点主要涉及了C#编程语言在处理图像数据存储于SQL ...以上技术点的综合应用,实现了C#中图片在SQL Server数据库中的高效存取,不仅提升了数据管理的灵活性,也增强了Web应用的交互性和用户体验。

    二进制流形式上传图片,然后前台显示图片示例(vs2005+sql2005)

    在IT领域,尤其是在Web开发中,将图片以二进制流的形式存储在数据库中是一种常见的做法,这在处理大量图像数据或需要高效访问时尤其有用。本示例以Visual Studio 2005 (VS2005) 和 SQL Server 2005 (SQL2005) 为开发...

    Ajax无刷新上传图片。(jquery + c# ashx),生成缩略图等

    本文将深入探讨如何使用jQuery库结合C#的ASHX处理程序实现图片的无刷新上传,并生成缩略图。首先,我们需要理解Ajax的核心原理,它是Asynchronous JavaScript and XML(异步JavaScript和XML)的缩写,但现在更多地与...

    asp.net实现从数据库中下载以二进制存储的图片

    一种常见的做法是将图片以二进制形式存储在数据库中,这种方式可以方便地与业务数据进行关联,并简化了图片的管理。 #### 技术栈 - **ASP.NET**: 微软提供的一套基于.NET框架的服务器端Web应用框架。 - **C#**: ...

    asp.net中利用ashx实现图片防盗链

    在 Img.ashx 文件中,我们需要实现 IHttpHandler 接口,重写 ProcessRequest 方法来处理图片请求。以下是一个简单的示例代码: ```csharp using System; using System.Web; public class Img : IHttpHandler ...

    datagrid实例

    在这个实例中,我们将探讨如何使用datagrid来创建一个能够与后台数据库进行交互的Web页面。 首先,我们看到有`.ashx`文件,这代表“HTTP处理程序”(HTTP Handler),是ASP.NET中的一个轻量级组件,用于处理特定...

    C# ashx接口实现 实例

    在C#中,我们通过创建一个继承自`System.Web.IHttpHandler`接口的类来定义我们的ASHX处理器。这个类通常包含两个方法:`IsReusable`和`ProcessRequest`。`IsReusable`用于判断处理器实例是否可重用,而`...

    在ashx中验证是否登陆、是否有操作权限的基类

    在.NET开发环境中,ASP.NET Web API或传统的ASP.NET应用程序经常使用ASHX(HTTP Handler)来处理特定的HTTP请求。这些处理程序通常用于提供轻量级的API服务或者执行某些特定的任务。在标题提及的场景中,“在ashx中...

    ashx添加水印效果不改变原图片

    在.NET开发中,ASHX(Generic Handler)是一种轻量级的HTTP处理器,常用于处理一些简单的请求,如图片处理、数据交互等。标题提到的"ashx添加水印效果不改变原图片"是指通过ASHX处理器为图片动态添加水印,而不会...

    ashx文件的使用

    在这个例子中,我们看到`ProcessRequest`方法设置了响应的内容类型为JPEG图片,然后从一个假设的`GetImageStream`方法中获取图片流,最后将其写入到HTTP响应中。 ### ashx文件的应用场景 ashx文件可以应用于多种...

    ajax+ashx分页

    2. **数据库操作**: 文件中需要包含数据库连接代码,使用ADO.NET或者Entity Framework等ORM框架来执行SQL查询。例如,你可以根据用户传递的页码和每页记录数,构建一个SQL分页查询语句。 3. **数据返回格式**: 由于...

Global site tag (gtag.js) - Google Analytics