Генерация отчёта из кода

Обсуждение Stimulsoft Reports.WPF
kougener
Сообщения: 8
Зарегистрирован: 26 июл 2012, 12:51

Генерация отчёта из кода

Сообщение kougener »

Передо мной стоит задача написать отчёт, в котором есть таблица и две диаграммы. Все данные для таблицы и диаграмм берутся из кода, специально сделал DataTable, чтобы из стимулсофтовских библиотек было удобней работать. Возникает проблема, что я не понимаю, как делать отчёты динамически, без визуального шаблона (в таблице переменное количество столбцов). Никаких особо помогающих мне примеров не нашёл ни в доке, ни в интернете, а методом научного тыка ничего не получается. Последняя версия того, что я пытаюсь сделать, выглядит так:

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

            StiReport report = new StiReport();

            report.RegData(mrm);
            report.Dictionary.Synchronize();

            StiPage page = report.Pages[0];

            StiHeaderBand headerBand = new StiHeaderBand();
            headerBand.Height = 0.5;
            headerBand.Name = "HeaderBand";
            page.Components.Add(headerBand);

            StiText headerText = new StiText(new RectangleD(0, 0, 5, 0.5));
            headerText.Text = "Отчёт по анализу породы";
            headerText.HorAlignment = StiTextHorAlignment.Center;
            headerText.Name = "HeaderText";
            headerText.Brush = new StiSolidBrush(System.Drawing.Color.LightGreen);
            headerBand.Components.Add(headerText);

            StiTable table = new StiTable();
            table.Name = "TM";
            table.ColumnCount = mrm.Columns.Count;
            table.RowCount = mrm.Rows.Count;
            table.Width = page.Width;
            table.Height = page.GridSize * 12;
            table.DataSourceName = String.Format("{0}", mrm.TableName); 
            page.Components.Add(table);

            report.ShowWithWpf();
И этот код не работает(ArgumentOutOfRangeException), видимо в силу того, что я совсем не понимаю, как что устроено. Буду очень рад получить помощь кодом / ссылками на человечные маны / примеры исходников
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Генерация отчёта из кода

Сообщение HighAley »

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

Ознакомьтесь пожалуйста со следующим примером проекта создания отчёта из кода.
DynamicCreateReport.zip
(15.46 КБ) 374 скачивания
Wpf код отличается только следующими методом:
ShowWithWpf();

Код создания отдельных компонентов можно посмотреть, создав их в дезайнере, во вкладке Код.

Обращайтесь, если возникнут ещё вопросы.

Спасибо.
kougener
Сообщения: 8
Зарегистрирован: 26 июл 2012, 12:51

Re: Генерация отчёта из кода

Сообщение kougener »

Спасибо, очень помогло. Более-менее методом научного тыка + мануал научился генерировать отчёты из кода. Но возник дополнительный вопрос: почему в дизайнере репортов нет вкладки Код? И ещё, есть ли какая-нибудь баг-трекинговая система, открытая для всех пользователей?
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Генерация отчёта из кода

Сообщение HighAley »

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

Вы можете включить вкладку Код в контекстном меню заголовка страницы в дизайнере.
EnableCodeTab.Wpf.png
EnableCodeTab.Wpf.png (19.63 КБ) 6432 просмотра
К сожалению, у нас нету баг-трекинговой системы. Мы решаем возникшие проблемы на форуме либо на тикет-системе. Туда вы можете писать по адресу support@stimulsoft.com

Спасибо.
kougener
Сообщения: 8
Зарегистрирован: 26 июл 2012, 12:51

Re: Генерация отчёта из кода

Сообщение kougener »

Спасибо за оперативную помощь. Возник новый вопрос: возможно ли так разместить databand и chart на одном уровне (в том смысле, что начало бэнда и начало диаграммы находятся на одной линии), чтобы databand не расползался на несколько страниц? Пробовал делать через панели и датабанды/футербанды, но не помогает. Загвоздка заключается в том, что у этих элементов нет фиксированного местоположения, главное условие - чтобы они находились после другой таблицы, высота которой нам заранее неизвестна.
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Генерация отчёта из кода

Сообщение Ivan »

Здравствуйте.
kougener писал(а):Возник новый вопрос: возможно ли так разместить databand и chart на одном уровне (в том смысле, что начало бэнда и начало диаграммы находятся на одной линии), чтобы databand не расползался на несколько страниц?
Не совсем понятно взаимное расположение компонентов и требуемое их поведение.
Объясните пожалуйста более подробно, по возможности с примерами.

Спасибо.
kougener
Сообщения: 8
Зарегистрирован: 26 июл 2012, 12:51

Re: Генерация отчёта из кода

Сообщение kougener »

Вот так я примерно всё представляю:Изображение
В DataBand1 отображаются с динамическим количеством столбцов и строк, поэтому DataBand2 будет иметь неизвестную до компиляции позицию. DataBand3 и Chart расположены в одном DataBand'e для того, чтобы отображались рядом друг с другом на одной странице. Но, получается так, что данные из DataBand3 располагаются по 1 строке на страницу, что не есть хорошо в моём случае. Собственно у меня вопрос: как сделать так, чтобы DataBand3 отображал все данные скопом, на одной странице, и при этом Chart находился справа от него.
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Re: Генерация отчёта из кода

Сообщение Ivan »

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

Структура отчета вроде бы правильная, всё должно работать.
Пришлите пожалуйста ваш пример отчета с данными для анализа.

Спасибо.
kougener
Сообщения: 8
Зарегистрирован: 26 июл 2012, 12:51

Re: Генерация отчёта из кода

Сообщение kougener »

Вот таким кодом я генерирую отчёт - http://paste.org.ru/?xmggsz И получается следующий отчёт (в аттаче)
Вложения
Report.mdc
Пример получаемого отчёта
(61.91 КБ) 486 скачиваний
HighAley
Сообщения: 1998
Зарегистрирован: 08 июн 2011, 11:36
Откуда: Stimulsoft Office

Re: Генерация отчёта из кода

Сообщение HighAley »

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

Вам надо установить свойство CanShrink у dataBand2 и panelOne.

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

panelOne.CanShrink = true;
dataBand2.CanShrink = true;
Спасибо.
Ответить