加入收藏 | 网站地图 | | RSS | WAP
你好,游客 登录 注册 搜索

GridView如何显示数据库里存放的图片

[日期:2010-03-08] 作者: 来源: [字体: ]

在GridView控件中的ImageField没有DataField属性,怎么才能绑定到sql server中的Image Field?打DynamicImage控件从beta2中消失后,成了个问题。ASP.NET2.0随之也给我们带来了另外一种解决方案。

那就是方便地利用HttpHandler(.ashx)动态显示数据库中的图片,这点在VS2005中提供了PersonalWebSite等模版中已经给出方案:通过ashx动态获取数据库中的某条图片数据,然后在GridView等控件的自定义模版中安置一个Image控件,并设置Image控件的ImageUrl属性为类似 XXX.ashx?photoId=1 即可显示图片。

下面为Handler.ashx的代码:

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Web;
using System.Configuration;

public class Handler : IHttpHandler ...{

public bool IsReusable ...{
get ...{
return true;
}

}


public void ProcessRequest(HttpContext context) ...{
// Set up the response settings
context.Response.ContentType = "image/jpeg";
context.Response.Cache.SetCacheability(HttpCacheability.Public);
context.Response.BufferOutput
= false;

int photoId = -1;
Stream stream
= null;

if (context.Request.QueryString["PhotoID"] != null &&
context.Request.QueryString[
"PhotoID"] != "") ...{
photoId
= Convert.ToInt32(context.Request.QueryString["PhotoID"]);
stream
= GetPhoto(photoId);
}


const int buffersize = 1024 * 16;
byte[] buffer = new byte[buffersize];
int count = stream.Read(buffer, 0, buffersize);
while (count > 0) ...{
context.Response.OutputStream.Write(buffer,
0, count);
count
= stream.Read(buffer, 0, buffersize);
}

}


public Stream GetPhoto(int photoId) ...{
SqlConnection myConnection
= new SqlConnection(
ConfigurationManager.ConnectionStrings[
"Personal"].ConnectionString);
SqlCommand myCommand
= new SqlCommand
(
"SELECT [BytesOriginal] FROM [Photos] WHERE [PhotoID]=@PhotoID",
myConnection);
myCommand.CommandType
= CommandType.Text;
myCommand.Parameters.Add(
new SqlParameter("@PhotoID", photoId));
myConnection.Open();
object result = myCommand.ExecuteScalar();

try ...{
return new MemoryStream((byte[])result);
}

catch (ArgumentNullException e) ...{
return null;
}

finally ...{
myConnection.Close();
}

}

}

然后在GridView中自定义模版列:

<asp:TemplateField>
<ItemTemplate>
<asp:Image ID="Image1" runat="server"
ImageUrl
='<%# "Handler.ashx?PhotoID=" + Eval("PhotoID") %>' />
</ItemTemplate>
</asp:TemplateField>

这样即可在GridView中动态显示数据库中image类型图片数据了。其实VS2005自带的Stater Kit很有用的,另外,还有其他几个Club Web Site Starter Kit等,都可以在asp.net上载过来看看。

关键词:数据库 

收藏 推荐 打印 | 录入:987950121 | 阅读:
本文评论   查看全部评论 (2)
表情: 姓名: 字数
点评:
       
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事/刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款
第 2 楼
* 匿名 发表于 2016/12/25 15:44:31
http://www.blue1000.com/bkhtml/c16/2010-01/66757.htm 坐飞机250字 http://www.135995.com/details/zt46207.html 坐飞机200字 http://www.135995.com/details/zt46208.html
第 1 楼
* 匿名 发表于 2016/12/24 15:32:13
http://www.blue1000.com/bkhtml/c16/2010-01/66757.htm 竞选团委书记的发言稿 http://www.135995.com/show/21255.html 竞选学习委员的发言稿 http://www.135995.com/show/21252.html