代码之家  ›  专栏  ›  技术社区  ›  Todd Langdon

如何处理绑定到自定义程序集对象数据源的RDLC报表中的空嵌套对象?

  •  1
  • Todd Langdon  · 技术社区  · 16 年前

    我有一个RDLC报告,我直接将其呈现为PDF格式的响应流(而不是使用ReportViewer)。在呈现报表的代码中,它的数据源绑定到自定义程序集中定义的一个(类)对象列表。这似乎在很大程度上起作用。我的问题是我似乎无法处理嵌套对象为空的情况。例如,给定ClassA和ClassB(嵌套对象)定义如下:

        Public Class ClassA
           Public Id As Integer
           Public Name As String
           Public TheNestedObject As ClassB
        End Class
    
        Public Class ClassB
           Public Id As Integer
           Public Name As String
           Public TheParentObject As ClassA
        End Class
    

    每当我试图有条件地显示“n/a”时,如果表达式中的类B为空,则如下所示:

    =IIf(IsNothing(Fields!TheNestedObject.Value,"n/a", Fields!TheNestedObject.Value.Name))
    

    如果EstedObject为空,则报告显示“错误”。如果estedObject不为空,则正确显示名称。

    我在这里做错什么了?

    谢谢!!!!

    3 回复  |  直到 9 年前
        1
  •  1
  •   Ezweb    16 年前

    IIF函数计算所有参数和字段!评估estedObject.value.name并给出错误原因字段!ThenestedObject.Value为空。

    我最后向报表添加了一些自定义代码。它位于“报告属性”->代码选项卡下。

    Public Function GetName(ByRef obj As Object) As String
        If obj Is Nothing Then
            Return "n/a"
        Else : Return obj.Name
        End If
    End Function
    

    然后您的文本框表达式是:

    =Code.GetName(Fields!TheNestedObject.Value)
    

    函数为空时返回“n/a”,不为空时返回“name”属性。

        2
  •  0
  •   Jason Plank Maksim Kondratyuk    14 年前

    我不知道怎么解决你的问题,但我有几个建议…

    1. 如果你把你的IIF声明改成:

      IIf(IsNothing(Fields!TheNestedObject,"n/a", Fields!TheNestedObject.Value.Name))
      

      IIf 总是计算所有参数,因此它试图计算 TheNestedObject 价值。如果 对象对象 NULL NOTHING 如果看到它抛出错误,我不会感到惊讶。

    2. 另一个想法是修改构造函数,以便在没有“b”的情况下添加“empty”“b”对象。例如, A.TheNestedObject 将指向没有数据的“b”对象。 B.Id 将为0(默认情况下),除非将其设置为可为空的int。 B.Name 将是“”。等。

        3
  •  0
  •   Divyang Desai Jonny B'Good    9 年前
    =iif(First(Fields!model.Value, "model") Is Nothing, "value is NULL", "value is not NULL")
    
    推荐文章