Создать источник данных по умолчанию

Обсуждение Stimulsoft Reports.NET
Ответить
Alkatraz
Сообщения: 22
Зарегистрирован: 27 апр 2010, 16:46

Создать источник данных по умолчанию

Сообщение Alkatraz »

Здравствуйте!

Есть необходимость сделать следующее:

1. Есть набор данных получаемых через Entity Framework 4, соответственно, прописан объект в модели данных.
2. Необходимо создать отчет, использующий этот набор данных и сохранить его в ресурсах.
3. При нажатии на кнопку показать отчет для каждого набора данных, запрошенного пользователем.

Пример:

Есть набор пользователей с указанием их ролей. Надо создать типовый отчет, использующий бизнес объект "Пользователь" и показывать его столько раз, сколько типов ролей пользователь выбрал на форме. Тоесть, для выбранных пяти ролей должно появиться пять отчетов со своим набором данных в каждом из них.

Я понял, что надо работать через BusinessObjects, объясните, пожалуйста, на пальцах, как мне поступить в данном случае.
Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Создать источник данных по умолчанию

Сообщение Jan »

Здравствуйте,
1. Есть набор данных получаемых через Entity Framework 4, соответственно, прописан объект в модели данных.
2. Необходимо создать отчет, использующий этот набор данных и сохранить его в ресурсах.
3. При нажатии на кнопку показать отчет для каждого набора данных, запрошенного пользователем.
Бизнес объект региструется в отчете при помощи такого кода:

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

report.RegBusinessObject("MyData", myData);
далее можно сделать синхронизацию бизнес-объекта и словаря данных (добавить его мета-описание в отчет) при помощи такого кода:

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

report.Dictionary.SynchronizeBusinessObjects(int maxLevel);
По поводу сохранения отчета в ресурсах. Если имеются ввиду ресурсы сборки, то можно подключить отчет в виде файла. После чего грузить его, как поток:

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

report.Load(stream);
если ресурсы - это база данных, то можно сохранить и загрузить позднее отчет в виде строки или в виде байт-массива.
Пример:

Есть набор пользователей с указанием их ролей. Надо создать типовый отчет, использующий бизнес объект "Пользователь" и показывать его столько раз, сколько типов ролей пользователь выбрал на форме. Тоесть, для выбранных пяти ролей должно появиться пять отчетов со своим набором данных в каждом из них.

Я понял, что надо работать через BusinessObjects, объясните, пожалуйста, на пальцах, как мне поступить в данном случае.
Не совсем понятна задача, которую нужно решить. Во всех случая отчет один и тот же или разный? Отчет генерируется из кода?

Спасибо.
Alkatraz
Сообщения: 22
Зарегистрирован: 27 апр 2010, 16:46

Создать источник данных по умолчанию

Сообщение Alkatraz »

Пожалуйста, можно по-подробней про регистрацию бизнес объекта?

Вот например, у меня есть таблица с пользователями, которую надо подсунуть отчету. Что надо указывать в RegBusinessObject - тип, который формирует EF или непосредственно уже сам набор данных?

Тоесть

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

report.RegBusinessObject("MyData", myDataType);
или

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

report.RegBusinessObject("MyData", DataContext.myData.Where(Item => Item.Active == true));
Если второй вариант, то значит, регистрировать этот объект мне надо непосредственно перед выполнением отчета?

Про сохранение в ресурсах - на форму можно кинуть отчет stiReport, у него в свойствах есть настройка "SaveReportInResources", как я понимаю, включение данного свойства сохраняет все изменения в отчете и после запуска приложения, этот отчет можно спокойно вызывать через метов Show?

Тут же вопрос - если отчет сохраняется, то как мне прописать в него мой объект, чтобы в Designtime я мог его открыть из IDE и там он уже присутствовал?

В идеале мне нужно реализовать следующее:
1. Кинуть отчет на форму (stiReport)
2. Прописать в нем мой бизнес объект (его структуру)
3. На момент показа отчета заполнить ранее определенный в отчете бизнес объект реальными данными по параметрам, выбранным пользователем
4. Показать отчет для каждого из выбранных параметров (что бы все отчеты показывались одновременно)

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

Jan
Сообщения: 495
Зарегистрирован: 19 фев 2009, 11:14

Создать источник данных по умолчанию

Сообщение Jan »

Здравствуйте,
Вот например, у меня есть таблица с пользователями, которую надо подсунуть отчету. Что надо указывать в RegBusinessObject - тип, который формирует EF или непосредственно уже сам набор данных?
Сам набор данных.
Тоесть

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

report.RegBusinessObject("MyData", myDataType);
или

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

report.RegBusinessObject("MyData", DataContext.myData.Where(Item => Item.Active == true));
Второй вариант правильный.
Если второй вариант, то значит, регистрировать этот объект мне надо непосредственно перед выполнением отчета?
Все верно. Или перед построением отчета или перед дизайном отчета.
Про сохранение в ресурсах - на форму можно кинуть отчет stiReport, у него в свойствах есть настройка "SaveReportInResources", как я понимаю, включение данного свойства сохраняет все изменения в отчете и после запуска приложения, этот отчет можно спокойно вызывать через метов Show?
Можно делать и так, но лучше всеже использовать файлы отчетов. Если вдруг понадобится изменить схему хранения отчетов (к примеру, хранить их в базе данных), то пересохранить отчеты из ресурсов в файлы будет достаточно проблемно.
Тут же вопрос - если отчет сохраняется, то как мне прописать в него мой объект, чтобы в Designtime я мог его открыть из IDE и там он уже присутствовал?
С этим есть некоторые проблемы. Обычно, наиболее полную информацию о бизнес-объектах можно получить во время исполнения программы. Самый удобный способ:

StiReport report = new StiReport();
report.Load("MyReport.mrt");
report.RegBusinessObject("MyData", myData);
report.Design();//или report.Show();
report.Save("MyReport.mrt");
В идеале мне нужно реализовать следующее:
1. Кинуть отчет на форму (stiReport)
2. Прописать в нем мой бизнес объект (его структуру)
3. На момент показа отчета заполнить ранее определенный в отчете бизнес объект реальными данными по параметрам, выбранным пользователем
4. Показать отчет для каждого из выбранных параметров (что бы все отчеты показывались одновременно)

Отчет один и форма у него будет одна и та же, изменяться будут только сами значения - они будут фильтроваться по параметрам, выбираемым пользователем, например надо показать всех пользователей, имеющих статус администратора или оператора, будет показано две формы отчета одинаковых по форме, но разных по содержанию (отдельно администраторы и операторы).
Спасибо.
Alkatraz
Сообщения: 22
Зарегистрирован: 27 апр 2010, 16:46

Создать источник данных по умолчанию

Сообщение Alkatraz »

Если объект надо регистрировать непосредственно перед показом отчета, то создать отчет в Designtime не представляется возможным, я правильно понимаю?

В самом отчете можно создать бизнес объект искуственно - прописать его структуру вручную в дизайнере. Можно ли заполнить такой искуственно созданный объект позже в Runtime?
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Создать источник данных по умолчанию

Сообщение Ivan »

Здравствуйте.
Alkatraz писал(а):Если объект надо регистрировать непосредственно перед показом отчета, то создать отчет в Designtime не представляется возможным, я правильно понимаю?
Да.
Alkatraz писал(а):В самом отчете можно создать бизнес объект искуственно - прописать его структуру вручную в дизайнере. Можно ли заполнить такой искуственно созданный объект позже в Runtime?
В принципе возможно. Но лучше в Runtime удалить старый искусственный бизнес-объект и зарегистрировать новый реальный:

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

report.Load("MyReport.mrt");
report.Dictionary.BusinessObjects.Clear();
report.RegBusinessObject("MyData", myData);
report.Dictionary.SynchronizeBusinessObjects(level);
report.Show();
Спасибо.
eLVik
Сообщения: 54
Зарегистрирован: 26 окт 2010, 07:45
Откуда: Сыктывкар, Республика Коми

Создать источник данных по умолчанию

Сообщение eLVik »

В принципе возможно. Но лучше в Runtime удалить старый искусственный бизнес-объект и зарегистрировать новый реальный
У меня в отчете есть DataBand, привязанный к коллекции бизнес-объектов. После вызова report.Dictionary.BusinessObjects.Clear(); источник DataBand'a сбрасывается (надпись "Не назначено")
Aleksey
Сообщения: 2908
Зарегистрирован: 22 апр 2010, 06:57

Создать источник данных по умолчанию

Сообщение Aleksey »

Здравствуйте,

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

Спасибо.
Ответить