DataGrid显示图片和详细信息问题

永远爱好写程序 2004-02-23 05:22:48
(1)显示图片
数据库表为:tblPigeon(PigeonNo,PigeonImage),其中有一个字段为PigeonImage是Image类型 (说明:数据库类型为SQLSERVER),我想在DataGrid中显示tblPigeon表中PigeonImage字段的缩略图

我参照"从SQL Server数据库提取图片并显示在DataGrid "的例子(具体网址:http://xml.sz.luohuedu.net/xml/ShowDetail.asp?id=ECD9AE16-8FF0-4A1C-9B9F-5E8B641CB1B1) 编写了如下代码但是加载后在DataGrid中总是不能显示图片(Image控件显示的总是一个叉),请各位高手看一下我的代码有什么问题

========================================================================
**frmPigeon.aspx(在该页面上有DataGrid,用来显示图片)
其中的图片ID列是按如下方式编写的
<asp:TemplateColumn HeaderText="图片名称">
<ItemTemplate>
<asp:Image id=Image1 runat="server" ImageUrl='<%# FormatUrl(DataBinder.Eval(Container, "DataItem.PigeonNo")) %>' ImageAlign="Middle">
</asp:Image>
</ItemTemplate>
</asp:TemplateColumn>

**frmPigeon.aspx.cs代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace LiminWeb
{
/// <summary>
/// frmPigeon 的摘要说明。
/// </summary>
public class frmPigeon : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid DataGrid1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!Page.IsPostBack)
{
LoadData();
}
}

private void LoadData()
{
DataSet objDs=new DataSet();
objDs=clsBase.clsBase.ExecuteSQL("Select * from tblPigeon");
DataGrid1.DataSource=objDs.Tables[0].DefaultView;
DataGrid1.DataBind();
}

protected string FormatUrl(object strArg)
{
return "frmReadImage.aspx?id="+strArg.ToString();
}
#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
}
}

**frmReadImage.aspx.cs的代码如下:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlTypes;
using System.Data.SqlClient;

namespace LiminWeb
{
/// <summary>
/// frmReadImage 的摘要说明。
/// </summary>
public class frmReadImage : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
SqlDataReader objDr=clsBase.clsBase.ExecuteReader("Select PigeonImage from tblPigeon where PigeonNo='"+Request.QueryString["id"]+"'");
Response.ContentType="image/pjpeg";
while(objDr.Read())
{
Response.BinaryWrite((byte[])objDr["PigeonImage"]);
}
objDr.Close();
Response.End();
}

#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
}
}
========================================================================
2.另外我想在DataGrid建立一个链接的列,当单击该列时弹出一个新的窗口显示该行记录的详细信息

以上问题请各路高手多多指点,解决后马上给分,在线等,多谢!!!


...全文
162 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
gzsxy8013 2004-09-15
  • 打赏
  • 举报
回复
难道就没有人会在DataGrid1_ItemDataBound事件中写代码????????????????????????????????????????????????????????????
yichuan1982 2004-09-15
  • 打赏
  • 举报
回复
用个IMAGEBUTTON显示看怎样,呵呵?
yichuan1982 2004-09-15
  • 打赏
  • 举报
回复
yp
gzsxy8013 2004-09-15
  • 打赏
  • 举报
回复
大哥说的详细点
我们刚刚学习
goody9807 2004-09-15
  • 打赏
  • 举报
回复
2. 可以用linkbutton 然后点击时传出一个主关键字 到另一页用这个关键字检索
gzsxy8013 2004-09-15
  • 打赏
  • 举报
回复
难道就没有人会在DataGrid1_ItemDataBound事件中写代码????????????????????????????????????????????????????????????
gzsxy8013 2004-09-15
  • 打赏
  • 举报
回复
不会没人会吧


gzsxy8013 2004-09-14
  • 打赏
  • 举报
回复
up
kauikuai kuai
gzsxy8013 2004-09-14
  • 打赏
  • 举报
回复
如果在DataGrid1_ItemDataBound事件中怎么写代码??
有谁写过
goingny 2004-09-14
  • 打赏
  • 举报
回复
在aspx文件中加入<Img Src="/路径/Images/<%# DataBinder.Eval(Container.DataItem,"图片") %>">试试
goody9807 2004-09-14
  • 打赏
  • 举报
回复
前文我们介绍了利用OleDb.NET将图片保存到数据库的实现方法,现在,我们同样使用OleDb.NET将来自数据库的图像数据在页面显示出来。

首先,我们来看实现数据显示的类,代码如下:

namespace UploadSample {


public class MainDisplay : System.Web.UI.Page {


public void Page_Load(System.Object sender, System.EventArgs e) {


int ImgID = System.Convert.ToInt32(Request.QueryString["ImgID"]);

System.Data.OleDb.OleDbConnection Con = new System.Data.OleDb.OleDbConnection("Provider=SQLOLEDB;Data Source=localhost;" +

"Integrated Security=SSPI;Initial Catalog=northwind");

System.String SqlCmd = "SELECT * FROM Images WHERE ImageID = ?";

System.Data.OleDb.OleDbCommand OleDbCmdObj = new System.Data.OleDb.OleDbCommand(SqlCmd, Con);

OleDbCmdObj.Parameters.Add("@ImageID", System.Data.OleDb.OleDbType.Integer).Value = ImgID;


Con.Open();


System.Data.OleDb.OleDbDataReader OleReader = OleDbCmdObj.ExecuteReader();



OleReader.Read();


Response.ContentType = (string)OleReader["ContentType"];


Response.OutputStream.Write((byte[])OleReader["Image"], 0, (int)OleReader["ByteSize"]);


Response.End();


Con.Close();


}


}


}

在以上的代码中,我们实现使用Request.QueryString["ImgID"]取得要求显示的图片的ImgID,这个ImgID就是图片在数据库中的唯一ID,该ID是上传图像数据的时候,数据库直接生成的。

在上面代码中,我们需要注意的就是图像的生成部分,当DataReader从数据库取得图像数据以后,不能直接和其他文本数据一样显示在页面,而应该首先设置数据类型ContentType,这里,数据类型就是使用我们上传数据的时候添加的数据类型,用(string)OleReader["ContentType"]取得;然后使用Write方法将数据显示在页面;最好,使用End方法结束数据输出。

ny_nicholas 2004-09-14
  • 打赏
  • 举报
回复
http://dotnet.aspx.cc/ShowDetail.aspx?id=ECD9AE16-8FF0-4A1C-9B9F-5E8B641CB1B1
gzsxy8013 2004-09-14
  • 打赏
  • 举报
回复
怎么用啊
我想知道我也遇到这样的问题
谢谢
haiersoft 2004-03-29
  • 打赏
  • 举报
回复
好的,我用了,很好用,谢谢!

62,266

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧