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

Проблемы с сортировкой бизнес-объектов

Добавлено: 28 мар 2008, 08:11
mimas
Есть у меня такой бизнес-объект:

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

   public class PersonnelBase : PersonnelBaseName
    {
        // Поля сотрудника
    }

public class PersonnelAbonent
    {
        private PersonnelBase _personnel;

        public PersonnelBase Personnel
        {
            get { return _personnel; }
            set { _personnel = value; }
        }

       //другие поля абонента
       public string Description {}
       public AbonentTypes Type {}
       ...
       //вложенная коллекция
       public List Phones {}
       ...

    }
при генерации отчета регистрирую у себя коллекцию из кучи таких объектов, всё отлично добавляется
получаем вот такой словарь данных.
Самый первый - AbonentsCollection.
Каждый объект содержит вложенный подъобъект AbonentsCollection.Personnel

Подключив нужные сборки, даже генерим на основе этого замечательный отчет
Изображение
Изображение

НО! Когда мне приспичило сделать сортировку внутри группы по полю AbonentsCollection.Personnel.SecondName
Изображение
В выпадающем списке полейвыбираю нужное AbonentsCollection.Personnel.SecondName, находящееся на втором уровне! Оно не выбирается!
Выбираются только элементы AbonentsCollection.ХХХ первого уровня. Хотя там отношение типа один к одному. Собственно и словарь-то сгенерился автоматически. Значит всё как надо. И работает всё. А вот сортировать по полю вложенного объекта не выходит. Пытался править в коде на си шарпе поле сортировки вручную - не проканывает, он этих изменений будто не запоминает.

Проблемы с сортировкой бизнес-объектов

Добавлено: 28 мар 2008, 08:36
mimas
победил это использовав в качестве источника данных вторую коллекцию сгенерированную в словаре AbonentsCollection_Personnel с добавленной связью к AbonentsCollection через сущность Personnel. Однако вопрос остается в силе. Ибо если вложенную сущность нельзя использовать (в данном случае для сортировки - а для вывода используется очень даже замечательно), может её вообще не нужно было генерить до второго уровня, а сразу делать только две коллекции связанные через связь. Или всетки (имхо лучше) сделать возможность сорторовки по полям вложенного объекта

Проблемы с сортировкой бизнес-объектов

Добавлено: 30 май 2008, 03:39
mimas
ПРОБЛЕМА ЖИВА!!!
Почему если в объекте есть свойство- другой объект, то вывести в отчет поля этого вложенного объекта можно, а сортировать по его полям НЕЛЬЗЯ!! ЭТО БАГ!
Вот мои коллекции данных.
Изображение
Отчет с группами
Группы формируются из AbonentsCollection_Personnel, т.к. необходимо выводить инфу по сотрудникам. При этом группируются по свойству AbonentsCollection_Personnel.Depart.Code - отдел.
У сотрудника есть свойство-объект Job - должность. Одна из колонок AbonentsCollection_Personnel.Job.Title - назв-е должности.
Я хочу чтобы группа сортировалась по AbonentsCollection_Personnel.Job.Rank - важность должности. Однако ни среда мне этого сделать не дает
Изображение
ни прямое редактирование XML файла отчета. Так задумано или это недоделка?

Проблемы с сортировкой бизнес-объектов

Добавлено: 30 май 2008, 08:01
Edward
mimas писал(а):ПРОБЛЕМА ЖИВА!!!
Почему если в объекте есть свойство- другой объект, то вывести в отчет поля этого вложенного объекта можно, а сортировать по его полям НЕЛЬЗЯ!! ЭТО БАГ!
Отчет с группами
Группы формируются из AbonentsCollection_Personnel, т.к. необходимо выводить инфу по сотрудникам. При этом группируются по свойству AbonentsCollection_Personnel.Depart.Code - отдел.
У сотрудника есть свойство-объект Job - должность. Одна из колонок AbonentsCollection_Personnel.Job.Title - назв-е должности.
Я хочу чтобы группа сортировалась по AbonentsCollection_Personnel.Job.Rank - важность должности. Однако ни среда мне этого сделать не дает
ни прямое редактирование XML файла отчета. Так задумано или это недоделка?
Мы, к сожалению, не можем автоматически сортировать по полям вложенного в коллекцию класса.

Но сортиорвка возможна при помощи GroupHeaderBand с нулевой высотой и c указанным ниже expression как условием группировки. В заголовке группы можно установить направление сортировки Ascending или Descending.

Доступ к полю, по которому будет осуществляться группировка:

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

{((Тип вложенного класса Job)AbonentsCollection_Personnel["Job"]).Rank }
"Тип вложенного класса Job" - это тип вложенного объекта Job, к которому мы приводим поле Job бизнес-объекта.

В примере "BusinessObjects" из стандартной поставки Stimulsoft Reports.Net для IEnumerable условие группировки по полю DepartmentName выглядит следующим образом:

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

{((Department)EmployeeIEnumerable["Department"]).DepartmentName}
Спасибо.