1

我想使用以下代码将图像添加到 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
4

3 回答 3

0

您可以使用RowDataBound事件来更改 GridView Row 中的某些内容。

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";     
    }
}

编辑

您不能将图像设置为解决方案。为此,您必须创建一个处理程序(.ashx 文件)并在 C: 上传递您的图像名称并返回一个字节 [],如下所示:

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

image在您的页面上,通过在 url 中传递参数的处理程序进行设置:

Image image = ((Image)row.FindControl("img"));
img.ImageUrl = "ImageHandler.ashx?image=1.png";
于 2012-12-10T13:30:22.590 回答
0

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

于 2012-12-10T13:33:32.230 回答
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     
}

通过gridview使用循环不是正确的方法,它会降低性能

于 2012-12-10T13:50:36.700 回答