如何在GridView中基于SelectedValue显示图像?

时间:2010-11-04 14:04:23

标签: c# asp.net image gridview

我已经构建了一些后端代码来从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在数据库服务器上执行的存储过程,因此该部分正在工作,但图像的显示不是。我错过了什么?

2 个答案:

答案 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);
    }