Можно ли каким ни будь способом вывести таблицу внутри таблицы? при этом связать ее данные с данными выводящимися в первой таблице.
Как пример, есть таблица с перечислением продуктов и связанная таблица с поставщиками этого продукта.
Для каждого продукта вывести в одной строке его название и перечислить поставщиков с логотипами (картинка)
Вопрос уже разрешился.
Для тех кто будет интересоваться как:
Рисуем таблицу из двух колонок и двух строк, обеденяем ячейки в первой колонке, туда заносим данные о продукте, во второй колонке во второй строке данные о поставщике.
при выводе продукта делаем PrintRow(0); при выводе постащиков PrintRow(1);
Поправляю сам себя: в последней сборке цеплять свои обработчики на save/load нужно иначе. Используйте новый компонент EnvironmentSettings (он есть в Visual Studio Toolbox) и его события - CustomOpenDialog, CustomSaveDialog, CustomOpenReport, CustomSaveReport. Примеры использования есть в справке.
У меня есть вопрос, я недавно скачал ваш генератор отчётов под .NET демку последнюю версию!!!Почему возникает ошибка при использовании стандартного DataSet. Для ясности напишу подробнее: в общем беру стандартный компонент DataSet, создаю в нём таблицу со столбцами потом, кидаю компонент fastreport, в настройках указывают источник DataSet и нужную мне таблицу, открывается дизайнер, всё нормально таблица видна, я кидаю столбцы на Bend Dаta, делаю просмотр вроде как всё нормально, потом компилирую программу всё без ошибок, но когда требуется показать отчёт возникает ошибка такого характера: "В экземпляре объекта не задана ссылка на объект" в этом месте где вызываю report1.Show()!!!!((((( Пожалуйста поясните как из стандартного DataSet вывести данные очень нужно.....буду очень признателен
Я делаю так, и у меня работает:
- создаю датасет в студийном мастере;
- на форму кладу DataSet, при этом студия предлагает подключить его к типизированному датасету, созданному мастером;
- кладу Report, выбираю Design Report. В окне подключения выбираю подключение к таблице датасета;
- делаю дизайн отчета. Уже в дизайнере есть возможность запустить отчет (FastReport заполняет типизированный датасет автоматически с помощью reflection);
- чтобы показать отчет в runtime, пишу обработчик кнопки ОК:
Всеже хотелось иметь этот инструмент. При печати таблиц с использованием ДатаБэнда все получается отлично до тех пор пока не пытаемя печатать таблицу на двух листах по ширине. Дата бенд тут не подходит т.к. нет корректной разбивки на две страницы. а если юзать SplitBigPages то невозможно отобразить номер страницы. Поэтому юзаем таблицу. но нужна возможнасть а-ля Start New Page у DataBend....
При печати таблиц с использованием ДатаБэнда все получается отлично до тех пор пока не пытаемя печатать таблицу на двух листах по ширине. Дата бенд тут не подходит т.к. нет корректной разбивки на две страницы. а если юзать SplitBigPages то невозможно отобразить номер страницы. Поэтому юзаем таблицу.
Таблицу используете только для этого? Не очень удобно... Могу сделать режим, при котором можно обойтись дата-бэндом.
Вас интересует создание собственных типов connection? Эта часть документации еще не готова; я постараюсь описать процесс максимально подробно и добавлю в class reference manual.
К какой БД Вы хотите подключаться?
Вообще то мне нужен мост между клиентом и сервером приложений. Клиент при дизайне отчёта не должен знать к какому SQL серверу он обращается, но в то же время для клиента всё должно быть прозрачно (так как будто он работает на прямую з SQL сервером). То есть при дизайне отчёта, пользователь пишет SQL запросы, и они выполняются на сервере приложений (через мост), а результат перенаправляется на клиент (мост), который и передает результат для отчёта (или чего то другого).
Боюсь, такое сделать проблематично. Фастрепортовский Connection (класс DataConnectionBase) сильно завязан на использование DataSet. Все, что можно менять - собственно объект DbConnection, который подключается к базе, и DbDataAdapter, который возвращает результат запроса (заполняет им таблицу DataSet).
... Все, что можно менять - собственно объект DbConnection ...
Я так понимаю, что фастрепортовский Connection создает соответствующий DbConnection и DataAdapter и использует их.
Если так, то нужно писать свой DbConnection и DataAdapter и соответствующий фастрепортовский Connection.
Я могу несколько упростить задачу, чтобы можно было обойтись без подключений и адаптеров. Но требование использовать объект DataTable для данных - обязательно.
Я могу несколько упростить задачу, чтобы можно было обойтись без подключений и адаптеров. Но требование использовать объект DataTable для данных - обязательно.
DataTable нам не мешает (пока ).
Можно кинуть кусок кода, хотя бы схематически, как надо будет писать свой код без подключений и адаптеров.
У меня стоит задача организовать формирование пакета документов в одном репорте, т.е. сформировать одну/несколько страниц одного отчета, следующие страницы - другой отчет, а за ними, если это необходимо, несколько страницы первого отчета (с другими данными) и т.д.
Таким образом я хочу иметь возможность в один репорт набить разные шаблоны, а потом, каким-то образом управлять, какие шаблоны в каком порядке должны формироваться в отчеты и выводиться на печать.
Все шаблоны у меня получают данные из двух датасорсов, только одни читают одни данные, другие - другие.
Для реализации задуманного подходят сабрепорты, но есть одна загвостка - я не могу репорту сказать: "Сейчас выводи subreport1, теперь subreport2, а теперь снова выведи мне subreport1". Или могу???
Другой вариант, сделать набор страниц, но потом формировать сводный отчет и в него выводить заготовленные страницы в нужном порядке, и, если это необходимо, какие-то страницы повторять.
Поправляю сам себя: в последней сборке цеплять свои обработчики на save/load нужно иначе. Используйте новый компонент EnvironmentSettings (он есть в Visual Studio Toolbox) и его события - CustomOpenDialog, CustomSaveDialog, CustomOpenReport, CustomSaveReport. Примеры использования есть в справке.
Есть маленький нюанс - ну предположим мы делаем отчет - далее смотрим его в превью, однако там есть такая кнопочка как конструктор - в этот момент мы попадаем не в исходный дизайнер, а уже дизайнер для просматриваемой страницы - а как определить где мы находимся? Имеется ввиду программно. Потому как есть шансы затереть исходный отчет
Комментарии
Как пример, есть таблица с перечислением продуктов и связанная таблица с поставщиками этого продукта.
Для каждого продукта вывести в одной строке его название и перечислить поставщиков с логотипами (картинка)
Вопрос уже разрешился.
Для тех кто будет интересоваться как:
Рисуем таблицу из двух колонок и двух строк, обеденяем ячейки в первой колонке, туда заносим данные о продукте, во второй колонке во второй строке данные о поставщике.
при выводе продукта делаем PrintRow(0); при выводе постащиков PrintRow(1);
- таблицы
- матрицы
- вложенного отчета.
Я делаю так, и у меня работает:
- создаю датасет в студийном мастере;
- на форму кладу DataSet, при этом студия предлагает подключить его к типизированному датасету, созданному мастером;
- кладу Report, выбираю Design Report. В окне подключения выбираю подключение к таблице датасета;
- делаю дизайн отчета. Уже в дизайнере есть возможность запустить отчет (FastReport заполняет типизированный датасет автоматически с помощью reflection);
- чтобы показать отчет в runtime, пишу обработчик кнопки ОК:
Таблицу используете только для этого? Не очень удобно... Могу сделать режим, при котором можно обойтись дата-бэндом.
Можно в демке пример (или в приват) как создать свой Connection (на C#) по аналогии с MsSqlDataConnection.
С уважением, Andy.
Вас интересует создание собственных типов connection? Эта часть документации еще не готова; я постараюсь описать процесс максимально подробно и добавлю в class reference manual.
К какой БД Вы хотите подключаться?
Вообще то мне нужен мост между клиентом и сервером приложений. Клиент при дизайне отчёта не должен знать к какому SQL серверу он обращается, но в то же время для клиента всё должно быть прозрачно (так как будто он работает на прямую з SQL сервером). То есть при дизайне отчёта, пользователь пишет SQL запросы, и они выполняются на сервере приложений (через мост), а результат перенаправляется на клиент (мост), который и передает результат для отчёта (или чего то другого).
С уважением, Andy.
Я так понимаю, что фастрепортовский Connection создает соответствующий DbConnection и DataAdapter и использует их.
Если так, то нужно писать свой DbConnection и DataAdapter и соответствующий фастрепортовский Connection.
DataTable нам не мешает (пока ).
Можно кинуть кусок кода, хотя бы схематически, как надо будет писать свой код без подключений и адаптеров.
P.S.
А когда будет упрощена задача?
Да таблица только для этого
У меня стоит задача организовать формирование пакета документов в одном репорте, т.е. сформировать одну/несколько страниц одного отчета, следующие страницы - другой отчет, а за ними, если это необходимо, несколько страницы первого отчета (с другими данными) и т.д.
Таким образом я хочу иметь возможность в один репорт набить разные шаблоны, а потом, каким-то образом управлять, какие шаблоны в каком порядке должны формироваться в отчеты и выводиться на печать.
Все шаблоны у меня получают данные из двух датасорсов, только одни читают одни данные, другие - другие.
Для реализации задуманного подходят сабрепорты, но есть одна загвостка - я не могу репорту сказать: "Сейчас выводи subreport1, теперь subreport2, а теперь снова выведи мне subreport1". Или могу???
Другой вариант, сделать набор страниц, но потом формировать сводный отчет и в него выводить заготовленные страницы в нужном порядке, и, если это необходимо, какие-то страницы повторять.
В настоящий момент сделать это можно, используя разные отчеты и управляя порядком их печати программно. Например, так:
report1.Load("отчет1.frx");
report1.Prepare();
report1.Load("отчет2.frx");
report1.Prepare(true);
report1.Load("отчет1.frx");
report1.Prepare(true);
report1.ShowPrepared();
Этот код построит первый отчет, добавит к нему второй, потом опять первый.
В ближайшем будущем появятся события ManualBuild у страницы отчета и самого отчета - можно будет управлять этим процессом в скрипте отчета.
Есть маленький нюанс - ну предположим мы делаем отчет - далее смотрим его в превью, однако там есть такая кнопочка как конструктор - в этот момент мы попадаем не в исходный дизайнер, а уже дизайнер для просматриваемой страницы - а как определить где мы находимся? Имеется ввиду программно. Потому как есть шансы затереть исходный отчет