Разработка отчетов во время выполнения - PullRequest
0 голосов
/ 06 сентября 2011

Я занимаюсь разработкой приложения для форм Windows, в котором есть несколько окон, содержащих таблицы данных, с использованием vb.net.У клиента совсем недавно возникло желание распечатать данные каждой из этих таблиц.

Успешно спроектировав и внедрив мой первый отчет с использованием отчетов Crystal несколько месяцев назад, мой первый инстинкт был сделать это с помощью отчетов Crystal.Однако, поскольку я уже точно знал, какие столбцы и данные я хотел бы представить в своем первом отчете, я мог составить отчет с учетом этого, поэтому проблем не было.

Теперь проблема в том, что я не знаю точного количества столбцов, которые должны быть напечатаны в отчете, поэтому боюсь, что мне придется разрабатывать отчет программно, поэтому мои вопросы таковы;

  1. Существуют ли какие-либо средства для составления отчета программно?Например, могу ли я, используя только код, указывать в отчетах Crystal о размещении «табличного объекта» в разделе сведений, а затем о столбце с именем X и другом столбце с именем Y?Если возможно, может кто-нибудь указать мне пример кода о том, как сделать это или что-то подобное?

  2. Если 1 не представляется возможным в Crystal Reports, кто-то может указать мне на какое-то другое программное обеспечение для отчетностив котором я мог бы достичь 1, и, если возможно, как?

  3. Разумно ли я подхожу к этой проблеме или есть гораздо лучший и более простой способ достижения желаний клиентов?

ККстати, я уже предоставил возможность экспортировать таблицы в Excel, из которых клиент мог бы распечатывать их по своему усмотрению, но, похоже, они предпочитают более изящные отчеты с логотипами и тому подобным, чего можно было бы достичь в Crystal Reports.

Буду чрезвычайно признателен за любую помощь в реализации этой функции.

Ответы [ 3 ]

1 голос
/ 07 сентября 2011

У вас есть два способа сделать это, один сложный, другой легкий. Сначала давайте уберемся с трудного. CR имеет полностью функциональную библиотеку, которая позволяет создавать отчеты практически с нуля. Это называется библиотека РАН. Но это очень сложно и не самое лучшее для новичка в Crystal.

Следующее и самое простое решение - создать отчет, содержащий все возможные поля, которые вам могут понадобиться, а затем использовать модель ReportObject для динамического скрытия полей, которые вам не нужно показывать. Таким образом, если в вашем отчете может быть от 5 до 10 столбцов, создайте все десять из них в отчете. Затем в вашем приложении, если вам не нужен 10-й столбец, скройте его. Примерно так:

CrystalDecisions.CrystalReports.Engine.ReportDocument myReport;
myReport.Load("..your file...");
CrystalDecisions.CrystalReports.Engine.TextObject myField;
myField =(CrystalDecisions.CrystalReports.Engine.TextObject)HealthRounds.ReportDefinition.ReportObjects["Field10"];
myField.ObjectFormat.EnableSuppress = true;
...
0 голосов
/ 25 июня 2013

Это очень легко сделать, я просто хочу рассказать вам о новых методах, которые делают это следующим образом:

  1. поместите ваши данные, которые хотите отобразить, в адаптер и поместите данные адаптера в набор данных
  2. сгенерируйте код file.html в драйвере вашего компьютера, и пусть c
  3. заполняет данные из набора данных в этот файл в соответствии с ячейкой в ​​наборе данных и заголовке для набора данных, который является динамическим столбцом, который требуется отобразить
  4. после заполнения файла данными откройте html-файл

В браузере есть функция для печати содержимого страницы из предварительного просмотра файла - это динамический отчет, просто получите нужные данныеSQL-запрос

0 голосов
/ 21 сентября 2011

, если вам нужно действительно динамично и, возможно, проще, взгляните на list & label . пример того, что вам нужно сделать, выглядит несколько просто:

Proj.Open( @“c:\Reports\artikel.lst” ,  LlDomFileMode .Create,
  LlDomAccessMode .ReadWrite, true );

ObjectReportContainer container= new
  ObjectReportContainer (Proj.Objects);

container.Position.Left = “0” ;
container.Position.Top = “0” ;
container.Position.Width = “150000” ;
container.Position.Height = “200000” ;

SubItemTable table = new SubItemTable
  (container.SubItems);
table.TableID = “Customers” ;

TableLineData dataLineNew = new
  TableLineData (table.Lines.Data);
dataLineNew.Name = “Created dynamically” ;

TableFieldText textCol = new
  TableFieldText (dataLineNew.Fields);
textCol.Contents = “Product.No” ;

TableFieldBarcode barcodeCol = new
  TableFieldBarcode (dataLineNew.Fields);
barcodeCol.Contents = “Barcode(Product.No, ‘PDF417’)” ;

Proj.Save();
Proj.Close (); 

Подробнее здесь ...

Для использования этой функции требуется по крайней мере версия " Professional ". Я сделал несколько хороших программ с этим зрелым программным обеспечением.

...