我有asp.net程序,其中图像以字节格式存储在sql数据库中。当我搜索每个项目时,该值将显示在带有图像的网格视图中。某些产品没有图像,值为null。所以我需要为null值设置一个默认图像。我怎样才能做到这一点?请帮助。 这是我的代码
<img src='data:image/jpg;base64,<%# Eval("img") != System.DBNull.Value ? Convert.ToBase64String((byte[])Eval("img")) : string.Empty %>' alt="image" height="250px" width="275px"/>
答案 0 :(得分:1)
因为<%# ...%>
实际上是在页面上渲染的,所以很难在一行中使复杂的逻辑动作,所以我所做的是调用一个函数,并在该函数中我实现了我的逻辑,这里是一个基于你的问题的例子:
在asp.net和GridView内部
<asp:TemplateField >
<ItemTemplate >
<%#GetImage(Container.DataItem)%>
</ItemTemplate>
</asp:TemplateField>
以及
背后的代码protected string GetImage(object oItem)
{
// read the data from database
var cImgSrc = DataBinder.Eval(oItem, "img") as byte[];
// if we do not have any image, return some default.
if(cImgSrc == System.DBNull)
return "<img src=\"empty.gif\">"
else
// format and render back the image
return String.Format("<img src=\"data:image/jpg;base64,{0}\" alt=\"image\" height=\"250px\" width=\"275px\"/>",
Convert.ToBase64String((byte[])cImgSrc));
}
答案 1 :(得分:0)
RowDataBound ??
使用SQL视图
您可以使用RowDataBound
,但是每行都会触发RowDataBound
,这会导致Web应用程序变慢。因此,而不是RowDataBound
使用 SQL视图。
针对您当前的方案 - 使用sql view
创建一个ISNULL(,)
,如下所示。
select col1, col2, ISNULL(ImgCol, '<img src=\"empty.gif\">') AS ImgCol from tableName
并将上述查询绑定到C# DataTable
并将DataTable
与asp GridView