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