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

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

=Fields!Account.Value.Name

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

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

Спасибо

3 ответа

Решение

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

Больше информации:

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

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

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

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

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

Другие вопросы по тегам