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

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

Добавлено: 26 июл 2012, 13:09
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), видимо в силу того, что я совсем не понимаю, как что устроено. Буду очень рад получить помощь кодом / ссылками на человечные маны / примеры исходников

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

Добавлено: 26 июл 2012, 16:56
HighAley
Здравствуйте.

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

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

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

Спасибо.

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

Добавлено: 01 авг 2012, 17:20
kougener
Спасибо, очень помогло. Более-менее методом научного тыка + мануал научился генерировать отчёты из кода. Но возник дополнительный вопрос: почему в дизайнере репортов нет вкладки Код? И ещё, есть ли какая-нибудь баг-трекинговая система, открытая для всех пользователей?

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

Добавлено: 01 авг 2012, 17:55
HighAley
Здравствуйте.

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

Спасибо.

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

Добавлено: 13 авг 2012, 12:54
kougener
Спасибо за оперативную помощь. Возник новый вопрос: возможно ли так разместить databand и chart на одном уровне (в том смысле, что начало бэнда и начало диаграммы находятся на одной линии), чтобы databand не расползался на несколько страниц? Пробовал делать через панели и датабанды/футербанды, но не помогает. Загвоздка заключается в том, что у этих элементов нет фиксированного местоположения, главное условие - чтобы они находились после другой таблицы, высота которой нам заранее неизвестна.

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

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

Спасибо.

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

Добавлено: 14 авг 2012, 13:22
kougener
Вот так я примерно всё представляю:Изображение
В DataBand1 отображаются с динамическим количеством столбцов и строк, поэтому DataBand2 будет иметь неизвестную до компиляции позицию. DataBand3 и Chart расположены в одном DataBand'e для того, чтобы отображались рядом друг с другом на одной странице. Но, получается так, что данные из DataBand3 располагаются по 1 строке на страницу, что не есть хорошо в моём случае. Собственно у меня вопрос: как сделать так, чтобы DataBand3 отображал все данные скопом, на одной странице, и при этом Chart находился справа от него.

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

Добавлено: 14 авг 2012, 16:30
Ivan
Здравствуйте.

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

Спасибо.

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

Добавлено: 14 авг 2012, 17:31
kougener
Вот таким кодом я генерирую отчёт - http://paste.org.ru/?xmggsz И получается следующий отчёт (в аттаче)

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

Добавлено: 15 авг 2012, 16:53
HighAley
Здравствуйте.

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

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

panelOne.CanShrink = true;
dataBand2.CanShrink = true;
Спасибо.