Страница 1 из 2

Построение отчета на базе Объектов

Добавлено: 15 май 2008, 13:15
compositum
Подскажите пожалуйста, что я делаю не верно? Посмотрел этот ролик
Создал класс, который помимо свойств имеет коллекцию List, в которой содержатся объекты другого класса.

Изображение

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

Получаю это:

Изображение

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

Изображение

Как правильно поступить в этой ситуации?

Построение отчета на базе Объектов

Добавлено: 15 май 2008, 14:20
Edward
Установите, пожалуйста, следующее свойство:

Stimulsoft.Report.StiOptions.Dictionary.BusinessObjects.AllowUseFields = true;

Также Вы можете посмотреть пример BusinessObjects, который поставляется вместе со Stimulsoft Reports.Net.

Спасибо.

Построение отчета на базе Объектов

Добавлено: 15 май 2008, 16:35
compositum
Edward писал(а):Установите, пожалуйста, следующее свойство:

Stimulsoft.Report.StiOptions.Dictionary.BusinessObjects.AllowUseFields = true;

Также Вы можете посмотреть пример BusinessObjects, который поставляется вместе со Stimulsoft Reports.Net.

Спасибо.
а где именно нужно поместить этот код? Примеры я смотрел, результаты вижу, но разобраться не смог.

Построение отчета на базе Объектов

Добавлено: 16 май 2008, 06:03
Vital
Здравствуйте,

Это статическое поле. Код необходимо выполнить до операции регистрации бизнес-объекта, один раз за время выполнения программы.

Спасибо.

Построение отчета на базе Объектов

Добавлено: 18 май 2008, 11:23
compositum
Vital писал(а):Здравствуйте,

Это статическое поле. Код необходимо выполнить до операции регистрации бизнес-объекта, один раз за время выполнения программы.

Спасибо.
Спасибо, добавил, коллекции появились, но возникла другая проблема: объекты в составе коллекций так же не отображаются...
Для наглядности проблемы, упростил код:

Код: Выделить всё

class A
    {
        public string propA1 { get; set; }
        public string propA2 { get; set; }
        public Bcollection Items1;
        public Bcollection Items2;
        public A(string a1, string a2)
        {
            propA1 = a1; propA2 = a2; Items1 = new Bcollection();
            Items2 = new Bcollection();
        }
    }

    public class B
    {
        public string propB1 { get; set; }
        public string propB2 { get; set; }
        public override string ToString()
        {
            return propB1 + " " + propB2;
        }
    }
    public class Bcollection
    {
        List listB;
        public Bcollection()
        { listB = new List(); }

        public void Add(B b) { listB.Add(b); }
        public void Remove(B b) { listB.Remove(b); }
        public void RemoveAt(int b) { listB.RemoveAt(b); }        
    }
Нет доступа к объектам в составе коллекций (объекты класса В):

Изображение

Так же интересует такой вопрос: если в классе А или в классе В я создам метод, возвращающий значение, можно ли в отчете создать новое поле и в нем дать ссылку на этот метод, чтобы поле всегда содержало результат, возвращаемый этим методом? Если да, то как это сделать, поскольку методы своих классов я в режиме дизайна отчетов не вижу...

Построение отчета на базе Объектов

Добавлено: 19 май 2008, 06:44
Edward
Да, это возможно. Для этого создайте вычисляемую колонку и укажите в ней следующее выражение:

(тип объекта)(ИмяИсточникаДанных["Data"]).НазваниеМетода

Спасибо.

Построение отчета на базе Объектов

Добавлено: 19 май 2008, 07:16
compositum
Edward писал(а):Да, это возможно. Для этого создайте вычисляемую колонку и укажите в ней следующее выражение:

(тип объекта)(ИмяИсточникаДанных["Data"]).НазваниеМетода

Спасибо.
а насчет первого вопроса?
Нет доступа к объектам в составе коллекций (объекты класса В)

Построение отчета на базе Объектов

Добавлено: 19 май 2008, 11:23
couragic
Нет доступа к объектам в составе коллекций (объекты класса В)
Возможно для этого нужно наследовать Bcollection от одного из интерфейсов - IList, ICollection, IEnumerable.

Построение отчета на базе Объектов

Добавлено: 19 май 2008, 11:29
compositum
couragic писал(а):
Нет доступа к объектам в составе коллекций (объекты класса В)
Возможно для этого нужно наследовать Bcollection от одного из интерфейсов - IList, ICollection, IEnumerable.
дело в том, что мне нужно использовать свой класс-коллекцию, содержащий только те свойства и методы, что мне нужны, а посему класс нужен именно такой как я (упрощенно) показываю в коде. Наследуя интерфейсы, мне придется реализовывать кучу методов и свойств, которые не должны быть видны (по сути я юзаю именно их, но это скрыто внутри кода).

Построение отчета на базе Объектов

Добавлено: 19 май 2008, 13:51
Edward
Попробуйте изменить эту строку кода:

public class Bcollection
{
List listB;

следующим образом:

public class Bcollection
{
public List listB;

Также если Вы не хотите отображать определенные элементы Ваших бизнес-объектов, установите, пожалуйста:
1) атрибут [Browsable(false)] для этих объектов.
2) статическое свойство: StiOptions.Dictionary.BusinessObjects.FieldsProcessingType = StiFieldsProcessingType.Browsable


Спасибо.