Club.CNews: Reports for Silverlight или построитель отчетов c шаблонами и с группировкой

Четверг, 18 августа 2011 г.

Следите за нами в ВКонтакте, Facebook'e и Twitter'e

Установка Reports

Библиотека Calabonga.Silverlight.Reports специально упакована в nuget-пакет чтобы можно было с легкостью устанавливать/обновлять/удалять эту библиотеку. Давайте предположим, что Nuget Manager у Вас уже установлен, и тогда можно сразу перейти к установке пакет отчетов. Я создал новый Silverlight-проект чтобы продемонстрировать работу библиотеки. Нажимаем на проекте правую кнопку мыши и запускаем менеджер Nuget:



В открывшемся окне менеджера в поле поиска вбиваем “calabonga” и перед нами все пакеты, которые доступны под брендом “calabonga”:



На данный момент нам потребуется первый в списке “Silverlight Reporting”. А следом за ним я установлю “Samlpe classes and data” чтобы было “что” печать и группировать. Кнопка “Печать” и “Предварительный просмотр”

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

1:

3:

4:

5:

6:

7:

15:

23:

27:

Разметка простая, давай те теперь создадим шаблон. Создаем шаблон печати (ItemTemplate)

Добавлю в проект новый Silverlight UserControl. Пусть называется он Report1.xaml:



Надо добавить namespace для того чтобы Report стал доступен:

xmlns:clb="http://schemas.calabonga.com"

Я во всех своих библиотеках предпочитаю использовать такой namespace, что не приходилось “бегать, искать” что в какой сборке. Вы можете использовать такой же подход в своих сборках. Как сделать “красивый” namespace уже было описано ранее.

Теперь пришло время подготовить данные для печати. Создадим пару-тройку переменных:

1: private List

printData;

2: private Report1 report1;

Теперь вернемся в разметку самого шаблона, надо же к нему как-нибудь обращаться и для этого дадим ему имя, пусть зовут его CalaReport:

1:

3:

4:

5:

6:

7:

8:

А теперь добавим шаблон (ItemTemplate), который будет “рисовать” Person. Если посмотреть в библиотеку SilverlightSampleData, то можно увидеть свойства класса, которые можно отобразить в шаблоне:



Мой шаблон будет такой:

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

13:

15:

17:

18:

20:

22:

23:

25:

27:

28:

30:

32:

33:

35:

37:

38:

40:

42:

43:

45:

47:

48:

49:

50:

51:

Обратите внимание на то, как осуществляется привязка – в квадратных скобках. Просто мне кажется “так красивее” :)

И добавим еще и стили, которые использованы в шаблоне для отображения.

1:

2:

4:

6:

8:

10:

11:

13:

15:

17:

19:

21:

22:

Напишем код обработки нажатия кнопок, я приведу весь код, чтобы больше к нему не возвращаться, потому что он не измениться:

1: public partial class MainPage : UserControl

2: {

3: private List

printData;

4: private Report1 report1;

5:

6: public MainPage()

7: {

8: InitializeComponent();

9: Loaded += new RoutedEventHandler(MainPage_Loaded);

10: }

11:

12: void MainPage_Loaded(object sender, RoutedEventArgs e)

13: {

14: report1 = new Report1();

15: printData = People.GetPeople();

16: report1.CalaReport.ItemsSource = printData;

17: }

18:

19: private void print_Click(object sender, RoutedEventArgs e)

20: {

21: report1.CalaReport.Print();

22: }

23:

24: private void preview_Click(object sender, RoutedEventArgs e)

25: {

26: previewBox.Content = report1.CalaReport.GetPreview(previewBox);

27: }

28: }

Ну а теперь, давайте попробуем напечатать. Ура! Что-то видно на превью, да и на принтер что-то улетело… зажужжал гадина:



Надо бы HeaderTemplate и FooterTemplate добавить – для красоты и эстетики:

1:

2:

3:

5:

6:

7:

8:

9:

10:

11:

12:

13:

14:

15:

16:

18:

20:

21:

23:

25:

26:

28:

30:

31:

33:

35:

36:

38:

40:

41:

43:

45:

46:

48:

50:

51:

52:

53:

и нижняя часть:

1:

2:

3:

6:

7:

8:

9:

Нажимаем печать… И!…



Страница уже выглядит по другому. Про Вас не обращать внимание на шапку, немного кривая вышла, что, кстати, подтверждает чистоту эксперимента. Группировка и Агрегирующие функции

Эта библиотека была изначально задумана как “способная группировать и агрегировать данные при печати. Пришло время проверить на что она способна. Перед тем как добавить группировку надо подключить mscorlib.dll:

1: xmlns:sys="clr-namespace:System;assembly=mscorlib"

Добавим группировку по стране (Country):

1:

2:

3:

4: Country

5:

6:

7:

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

1: Gender

Между 4 и 5 строками. Теперь раз добавлена группировка следует добавить и шаблоны для группировки (Header и Footer), иначе прилетит ошибка. Шаблон группировки выглядит так:

1:

2:

3:

7:

8:

11:

14:

17:

20:

21:

22:

23:

24:

25:

26:

30:

31:

33:

36:

38:

40:

41:

42:

43:

И, как Вы уже наверное заметили, в шаблонах используются агрегирующие данные. А чтобы они появились следует добавить информацию об агрегации групп:

1:

2:

3:

4:

5:

6:

7:

8:

9:

10:

11:

12:

Компилируем… Запускаем…. Нажимаем предварительный просмотр… И… вуаля:



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

Так же хотелось бы добавить, что существуют еще и другие варианты шаблонов. А так же достаточное количество событий.



Надеюсь, что контрол будет востребован. На этом всё. Пишите комментарии.

Следите за нами в ВКонтакте, Facebook'e и Twitter'e


Просмотров: 1078
Рубрика: Hi-Tech


Архив новостей / Экспорт новостей

Ещё новости по теме:

RosInvest.Com не несет ответственности за опубликованные материалы и комментарии пользователей. Возрастной цензор 16+.

Ответственность за высказанные, размещённую информацию и оценки, в рамках проекта RosInvest.Com, лежит полностью на лицах опубликовавших эти материалы. Использование материалов, допускается со ссылкой на сайт RosInvest.Com.

Архивы новостей за: 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005, 2004, 2003