我已经构建了一些后端代码来从SQL Server数据库中检索图像。我想根据gridview控件的当前选定值在我的Web表单上显示此图像。
我有一个名为GetImage.aspx的页面,它接受两个查询字符串参数,entityId和entityType。 entityId是GridView.SelectedValue,entityType只是“T”。我的GetImage.aspx代码如下所示:
protected void Page_Load (Object server, EventArgs e)
{
if ((Request.QueryString["entityId"] != null) && (Request.QueryString["entityType"] != null))
{
int entityId = int.Parse(Request.QueryString["entityId"]);
string entityType = Request.QueryString["entityType"];
DBUtil DB = new DBUtil();
DataTable dt = DB.GetScreenshot(entityId, entityType);
if (dt != null)
{
Byte[] bytes = (Byte[])dt.Rows[0]["screenshot"];
Response.Buffer = true;
Response.Charset = "";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = dt.Rows[0]["ContentType"].ToString();
Response.AddHeader("content-disposition", "attachment;filename="+ dt.Rows[0]["fileName"].ToString());
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();
}
}
}
我需要在我的调用表单上显示哪些ASP.NET代码?
感谢。
修改
我已将此代码添加到我的表单中(我不是试图在GridView中显示图像,只是在GridView下的表单上):
<img id="tradeScreenshot" runat="server" alt="screenshot" />
并添加了此代码:
protected void grdTrades_SelectedIndexChanged(object sender, EventArgs e)
{
string tradeId = grdTrades.SelectedDataKey.Value.ToString();
tradeScreenshot.Src = "GetImage.aspx?entityId=" + tradeId + "&entityType=T";
}
不显示图像,但是当我在GridView中选择一个项目时,我可以看到正在使用正确的ID在数据库服务器上执行的存储过程,因此该部分正在工作,但图像的显示不是。我错过了什么?
答案 0 :(得分:1)
取决于您在gridview中显示的内容以及如何选择行。网格没有选择值 - 它有选择的项目,可以有多个数据键。
ASP.NET:
<img src="" runat="server" id="selectedimage" />
<asp:GridView OnSelectedIndexChanged="ChangeItem"
DataKeyNames="ImageId"
runat="server" id="MyGrid"></asp:GridView>
C#:
public void ChangeItem(object o,EventArgs e){
string ImageId = MyGrid.SelectedDataKey.Value.ToString();
selectedimage.Src = "GetImage.aspx?entityId="+ImageId+"&entityType=T";
}
答案 1 :(得分:1)
我在程序中使用存储过程遇到了同样的问题 这是我如何在单击按钮时调用DataGridView的图像。
pbxImage.Image = GetPhoto((byte[])dgvUrun.CurrentRow.Cells[8].Value);
这是GetPhoto方法:
private Image GetPhoto(byte[] photo)
{
MemoryStream ms = new MemoryStream(photo);
return Image.FromStream(ms);
}