我想用下面的代码将图像添加到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
答案 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不是正确的方法,也会降低性能