将图像添加到GridView Cell

时间:2012-12-10 13:26:49

标签: asp.net

我想用下面的代码将图像添加到GridView单元格但不显示图像

//aspx
 <asp:TemplateField HeaderText="image">
      <ItemTemplate>
          <asp:Image ID="img" runat="server" Width="100px" Height="100px" />
      </ItemTemplate>

//.cs -> In page_Load

for (int i = 0; i < GridView1.Rows.Count; i++)
{
      Image img = (Image)GridView1.Rows[i].FindControl("img");
      img.ImageUrl = path of image;
 }//for

3 个答案:

答案 0 :(得分:0)

您可以使用RowDataBound事件更改GridView行内的内容。

protected void GridView1_RowDatabound(object sender, GridViewRowEventArgs e)
{
    // check if this row is a row with Data (not Header or Footer)
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // find your Image control in the Row
        Image image = ((Image)e.Row.FindControl("img"));
        // set the path of image
        img.ImageUrl = "path of image";     
    }
}

或者您可以使用foreach语句在Rows集合中循环并更改图像路径。此代码可以在Page_Load事件中。

foreach(GridViewRow row in GridView1.Rows)
{ 
    // check if this row is a row with Data (not Header or Footer)
    if (row.RowType == DataControlRowType.DataRow)
    {
        // find your Image control in the Row
        Image image = ((Image)row.FindControl("img"));
        // set the path of image
        img.ImageUrl = "path of image";     
    }
}

编辑

您无法将图像设置为解决方案。要做到这一点,你必须创建一个Handler(.ashx文件)并在C:上传递你的图像名称,并返回一个字节[],如下所示:

public void ProcessRequest(HttpContext context)
{
    byte[] imageBytes = File.ReadAllBytes(@"C:\" + context.Request["image"]);
    context.Response.ContentType = "image/png";
    context.Response.BinaryWrite(imageBytes);
}

在您的页面上,通过处理程序在url:

中传递image参数来设置它
Image image = ((Image)row.FindControl("img"));
img.ImageUrl = "ImageHandler.ashx?image=1.png";

答案 1 :(得分:0)

事件Page_Load在GridView数据绑定或创建之前触发。如果它们都是相同的图像,为什么不在ItemTemplate中设置该路径?如果是因为在进入后面的代码之前你不知道路径,你可以将模板中的ImageUrl绑定到自定义属性,然后在Page_Load中设置该属性,然后填充属性。否则,您需要进行的任何更改都需要在RowDataBound事件中完成。

答案 2 :(得分:0)

您可以直接从数据库中提供图像路径

<ItemTemplate>
      <asp:Image ID="img" runat="server" Width="100px" Height="100px" ImageUrl='<%# Eval("Imageurl") %>' />
  </ItemTemplate>

或者在alt标签中给出url,在rowdatabound中使用它。

if (e.Row.RowType == DataControlRowType.DataRow)
{
    Image image1 = ((Image)e.Row.FindControl("img"));
    img.ImageUrl = image1.Alt; // You can check for path here if no image found     
}

使用loop through gridview不是正确的方法,也会降低性能