Как мне обрабатывать вложенные объекты с нулевыми значениями в отчете RDLC, который связан с источником данных пользовательских объектов сборки? - PullRequest
1 голос
/ 27 августа 2009

У меня есть отчет RDLC, который я отображаю непосредственно в поток ответов в формате PDF (а не с помощью ReportViewer). В коде, который отображает отчет, его DataSource связан с объектами List (Of ClassA), определенными в пользовательской сборке. Кажется, это работает по большей части. Моя проблема в том, что я не могу справиться с ситуацией, когда вложенный объект равен нулю. Например, заданные 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))

отчет отображает «#Error», если TheNestedObject имеет значение null. Если TheNestedObject не равен NULL, он правильно отображает имя.

Что я здесь не так делаю?

Спасибо !!!

Ответы [ 3 ]

1 голос
/ 12 ноября 2009

Функция iif оценивает все аргументы и, таким образом, поля!

Я закончил тем, что добавил некоторый пользовательский код в отчет. Он находится в свойствах отчета -> вкладка «Код».

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», если оно равно null, и свойство Name, если оно не равно.

0 голосов
/ 30 декабря 2011
=iif(First(Fields!model.Value, "model") Is Nothing, "value is NULL", "value is not NULL")
0 голосов
/ 27 октября 2009

Я не знаю наверняка, как решить вашу проблему, но у меня есть пара предложений ...

  1. Возможно, если вы изменили свое заявление IIF на:

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

    IIf всегда оценивает все аргументы, поэтому пытается оценить TheNestedObject .Value.Если TheNestedObject равно NULL или NOTHING, то я не удивлюсь, если оно выдаст ошибку.

  2. Другая идея заключается в изменении конструктора для добавления«пустой» объект «B» всякий раз, когда нет «B.»Например, A.TheNestedObject будет указывать на объект "B", у которого нет данных.B.Id будет 0 (по умолчанию), если вы не сделаете его обнуляемым Int.B.Name будет "".И т.д.

...