дочерние объекты в rdlc (Studio 2010RC) - PullRequest
10 голосов
/ 31 марта 2010

Я пытаюсь сослаться на подобъект в выражении поля в отчете за 2010 год. Это раньше работало в предыдущих версиях. Когда учетная запись ссылается на другой объект со свойствами, для работы используется следующее.

=Fields!Account.Value.Name

(Name - это свойство дочернего объекта, Account - родительский объект)

Тот же синтаксис выражения больше не работает. Как обратиться к свойствам подобъекта в службах отчетов в rdlc в студии 2010.

Спасибо

Ответы [ 3 ]

5 голосов
/ 16 октября 2011

Я могу подтвердить, что эта ошибка была исправлена ​​в VS2010 SP1 ... но вы должны пометить все соответствующих классов как сериализуемые.

Вы можете найти образец проекта на этом сайте, который показывает рабочую версию: http://wraithnath.blogspot.com/2011/04/reportviewer-object-datasource-nested.html

Автор также упоминает, что вашим классам понадобится конструктор без параметров, но я заставил его работать с использованием классов без конструктора по умолчанию. Тем не менее, если вы пометили все как сериализуемые и по-прежнему видите сообщение «#Error», попробуйте его с конструкторами без параметров.

4 голосов
/ 04 января 2011

К сожалению, вы не можете (пока), и обходной путь заключается в создании свойств в родительском объекте.

Дополнительная информация:

1 голос
/ 29 января 2013

Это, вероятно, не правильный ответ, но когда я чувствую, что отсутствие материала на эту тему побуждает меня публиковать информацию о моих выводах.

Допустим, у меня есть вложенный список дочерних объектов в родительском объекте. Это очень распространенная ситуация, например, если у вас есть объект заказа (родительский), у вас, вероятно, будет список элементов заказа (дочерних), как вы отображаете всю информацию с помощью rdlc? Есть два способа, 1 с использованием подотчета, а 2 - с помощью группировки. Я понимаю, что они оба могут достичь одного и того же, отображая список деталей в отчете.

public class Order{
    public int OrderID {get; set;}
    public string Descrpition {get; set;}
    public List<OrderItem> OrderItems {get; set;}
}
public class OrderItem{
    public int OrderItemID {get; set;}
    public decimal Price{get; set;}
}

Самый простой способ - использовать группировку. При группировании вы должны создать новый тип данных, который содержит свойства родительского и дочернего элементов. Я считаю, что этот способ работает и с многоуровневым вложенным списком объектов. Это может звучать глупо, но в большинстве случаев вам все равно придется создавать новый тип данных, поскольку типы, которые необходимо отобразить в отчете, отличаются от бизнес-объектов:

public class OrderReport{
    public int OrderID {get; set;}
    public string Description {get; set;}
    public int OrderItemID {get; set;}
    public decimal Price {get; set;}
}

Затем в rdlc вам просто нужно создать родительскую группу строк и дочернюю группу строк, Parent должен быть сгруппирован по OrderID, дочерняя группа строк должна быть настроена на «показ деталей». Я думаю, что вы можете сделать это несколько раз, чтобы получить многоуровневый вложенный список объектов.

...