SSRS:报表加载外部图片,图片未找到,我能隐藏图片控件吗?

5

我的SSRS报告从报告服务器上的特定客户编号文件夹中加载每个客户的标志图像。

我编写一个表达式,根据客户编号形成我的图像URL。

..."http://localhost/images/" + iCustomerNumber.ToString() + "/logo.gif"

我能够让它工作,但是我遇到的问题是,当特定客户没有图像时,我的报告会显示一个红色的X标记代替徽标。在这种情况下,我期望隐藏图片控件本身。有什么想法吗?
另一个不太好的解决方案是确保每个特定客户文件夹都有指定的图像!即使客户没有徽标,我也会放置一个空白的.gif或者一个尺寸为正方形像素的间隔符.gif。
1个回答

6
您可以尝试添加自定义代码,并在Image.Value属性中使用它,以便在找不到图像时加载默认图像:
Public Function GetImage(ByRef CustomerNumber As String) As String
    ' Customer image
    Dim ImageCustomerURL As String
    ImageCustomerURL = "http://localhost/images/" + CustomerNumber + "/logo.gif"
    ' Default Image if customer image does not exist
    Dim ImageDefaultURL As String
    ImageDefaultURL = "http://localhost/images/default.gif"

    ' Create a web request to see if customer image exists
    Dim m_Req As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(ImageCustomerURL)   
    Try
        Dim HttpWResp As System.Net.HttpWebResponse = CType(m_Req.GetResponse(), System.Net.HttpWebResponse)
        If HttpWResp.StatusCode = System.Net.HttpStatusCode.OK
            Return ImageCustomerURL
        Else
            Return ImageDefaultURL 
        End If
    Catch ex As System.Net.WebException
        If ex.Status = System.Net.WebExceptionStatus.ProtocolError Then
            Return ImageDefaultURL 
        End If
    End Try
    Return ImageDefaultURL 
End Function

那么你的Image.Value属性表达式应该是:

=Code.GetImage(iCustomerNumber.ToString())

编辑:设置Visibility.Hidden属性而不是使用默认图像

我认为使用默认图像比空白更好看,但实际上这两种方法是相同的:

Public Function HideImage(ByRef CustomerNumber As String) As Boolean
    ' Customer image
    Dim ImageCustomerURL As String
    ImageCustomerURL = "http://localhost/images/" + CustomerNumber + "/logo.gif"

    ' Create a web request to see if customer image exists
    Dim m_Req As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create(ImageCustomerURL)   
    Try
        Dim HttpWResp As System.Net.HttpWebResponse = CType(m_Req.GetResponse(), System.Net.HttpWebResponse)
        If HttpWResp.StatusCode = System.Net.HttpStatusCode.OK
            Return False
        Else
            Return True
        End If
    Catch ex As System.Net.WebException
        If ex.Status = System.Net.WebExceptionStatus.ProtocolError Then
            Return True
        End If
    End Try
    Return True
End Function

那么你的Visibility.Hidden属性表达式是:
=Code.HideImage(iCustomerNumber.ToString())

我想要隐藏控件!!!如果可见性不能调整,我可以退回到我提到的不太好看的解决方案。我可以在根目录中有一个默认图像。与您的“ImageDefaultURL”解决方案一致,在每个子文件夹中重复,以更加准确! - Numan
当然,可调整可见性 - 隐藏控件实际上是相同的想法。第一个解决方案在一个位置具有默认图像意味着您不必根据您的不良解决方案在每个客户文件夹中复制该图像 - 它只存在于一个位置,但如果有客户图像,则显示该图像。 - Chris Latta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接