Подтвердить что ты не робот

Дочерние объекты в rdlc (Studio 2010RC)

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

=Fields!Account.Value.Name

(Имя - это свойство дочернего объекта, Учетная запись - родительский объект)

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

Спасибо

4b9b3361

Ответ 2

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

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

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

Ответ 3

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

Скажем, если у меня есть вложенный список объектов children в родительском объекте. Это очень распространенная ситуация, например, если у вас есть объект заказа (родительский), у вас, вероятно, будет список элементов заказа (детей), как вы будете отображать всю информацию с помощью 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 вам нужно создать родительскую группу строк и группу дочерних строк, родительский элемент должен быть сгруппирован по OrderID, для группы дочерних строк должно быть указано "показать детали". Я думаю, вы можете сделать это несколько раз для достижения многоуровневого вложенного списка объектов.