在datagrid中输出图像

时间:2010-11-26 15:27:21

标签: asp.net datagrid .net-4.0

如何为绑定的网格视图执行自定义输出?即我在数据库中有一个布尔字段,而不是从<%#DataBinder.Eval(Container.DataItem,“BoolField”)%>中写出True,我想放一个图像(例如tick)在网格视图中。这可能吗?

2 个答案:

答案 0 :(得分:1)

首先,Eval是邪恶的。有一个eval的解决方案,但我会故意跳过它。

还有其他两种解决方案。您可以使用ImageField并对数据进行整形,以便在您应在ImageField的DataImageUrlField属性中指定的特殊属性中传递图片的corret URL。

另一个解决方案是添加一个带有Image控件的模板字段并处理RowDataBound事件从事件参数获取行的数据e.Row.DataItem将其转换为数据源中项目的类型并提取布尔值。然后,您可以使用FindControl来获取Image控件并确定其属性。像这样:

protected void Page_Load(object sender, EventArgs e)
{
    gvTest.DataSource = new bool[] { true, false };
    gvTest.DataBind();
}

protected void gvTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        Image imgBool = (Image)e.Row.FindControl("imgBool");
        bool data = (bool)e.Row.DataItem;
        if (data)
        {
            imgBool.ImageUrl = "/images/true.jpg";
            imgBool.AlternateText = "This is true";
        }
        else
        {
            imgBool.ImageUrl = "/images/false.jpg";
            imgBool.AlternateText = "This is false";
        }
    }
}

这可能看起来很多工作,但请记住,您可以使用相同的处理程序以类型安全的方式处理网格中的所有列。

答案 1 :(得分:0)