将默认图像设置为图像字段,这些图像是空值

时间:2015-01-21 08:59:55

标签: c# asp.net

我有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"/>

2 个答案:

答案 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并将DataTableasp GridView

绑定