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

вопрос по StiReport.GetReportFromAssembly

Добавлено: 15 июн 2009, 04:10
t0lik
Jan писал(а):Здравствуйте,

Покажите пожалуйста код, который приводит к такому случаю.

Спасибо.

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

            var tempFile = new FileInfo(Path.GetTempFileName());
            tempFile.Delete();
            StiReport masterReport = new StiReport();
            PrinterSettings printSettings=null;
            foreach (PrintData data in printData)
            {
                StiReport subReport;
                if (File.Exists(tempFile.FullName))
                    subReport = StiReport.GetReportFromAssembly(tempFile.FullName, true);
                else
                {
                    subReport = new StiReport();
                    subReport.Load(data.fileName);
                    subReport.Compile(tempFile.FullName);
                }
                subReport.EngineVersion = StiEngineVersion.EngineV2;
                if (!String.IsNullOrEmpty(data.Title))
                    engine.ReportName = data.Title;
                if (data.printerSettings != null)
                {
                    masterReport.PrinterSettings.Collate = data.printerSettings.Collate;
                    masterReport.PrinterSettings.Copies = data.printerSettings.Copies;
                    masterReport.PrinterSettings.PrinterName = data.printerSettings.PrinterName;
                }
                printSettings = data.printerSettings;
                subReport.RegData(data.DataSetName, data.DataSetName, data.data);
                if (subReport.NeedsCompiling && !subReport.IsCompiled)
                    subReport.Compile();

                subReport.PrinterSettings.ShowDialog = false;

                masterReport.SubReports.Add(subReport);
            }
            if (String.IsNullOrEmpty(printerSettings.PrinterName))
                CopyPrinterSettings(masterReport.PrinterSettings, printerSettings);
            else
                CopyPrinterSettings(printerSettings, masterReport.PrinterSettings);
            masterReport.PrinterSettings.ShowDialog = false;
            masterReport.Render(false);
            if(printSettings == null)
                printSettings = new PrinterSettings();
            printSettings.DefaultPageSettings.PaperSource = printSettings.PaperSources[1];
            var oldPaperSize = StiPrintProvider.PaperSizeForUsing;
            StiPrintProvider.PaperSizeForUsing = printSettings.DefaultPageSettings.PaperSize;
            StiPrintProvider.SetPaperSource = false;
            masterReport.Print(printSettings);
            StiPrintProvider.PaperSizeForUsing = oldPaperSize;
            StiPrintProvider.SetPaperSource = true;

вопрос по StiReport.GetReportFromAssembly

Добавлено: 16 июн 2009, 10:06
Andrew
Здравствуйте,

Код похоже правильный. Пришлите пожалуйста, sample project для анализа на support@stimulsoft.com

Спасибо.

вопрос по StiReport.GetReportFromAssembly

Добавлено: 17 июн 2009, 05:53
t0lik
Andrew писал(а):Код похоже правильный. Пришлите пожалуйста, sample project для анализа на support@stimulsoft.com
Отправил.

вопрос по StiReport.GetReportFromAssembly

Добавлено: 19 июн 2009, 06:48
Ivan
Здравствуйте.

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

Для устранения проблемы вам достаточно добавить всего одну строку кода сразу после создания главного отчета:

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

     StiReport masterReport = new StiReport();
     masterReport.ReportUnit = StiReportUnitType.Millimeters;
Спасибо.

вопрос по StiReport.GetReportFromAssembly

Добавлено: 19 июн 2009, 08:15
t0lik
Ivan писал(а):Для устранения проблемы вам достаточно добавить всего одну строку кода сразу после создания главного отчета:

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

     StiReport masterReport = new StiReport();
     masterReport.ReportUnit = StiReportUnitType.Millimeters;
К сожалению рецепт не помог (см. описание в почте).

вопрос по StiReport.GetReportFromAssembly

Добавлено: 23 июн 2009, 06:54
t0lik
t0lik писал(а):К сожалению рецепт не помог (см. описание в почте).
По последнем письму есть какие то исправления? Теперь уже получается GetReportFromAssembly ни причем, а вот когда в отчет (пустой) подотчеты добавляются - тут глюк печати получается (см. последнее письмо с тестовым проектом).
К сожалению мне никак не удалось заставить отдельные отчеты (даже если экземпляр StiReport один и тот же) не запрашивать при печати для каждой страницы источник бумаги, в отличие от мастер-отчета с подотчетами.

вопрос по StiReport.GetReportFromAssembly

Добавлено: 24 июн 2009, 12:58
Ivan
Здравствуйте.
t0lik писал(а):По последнем письму есть какие то исправления? Теперь уже получается GetReportFromAssembly ни причем, а вот когда в отчет (пустой) подотчеты добавляются - тут глюк печати получается (см. последнее письмо с тестовым проектом).
Причину проблемы нашли и устранили.
Исправление будет включено в следующий предрелизный билд от 29 Июня.

Спасибо.

вопрос по StiReport.GetReportFromAssembly

Добавлено: 24 июн 2009, 13:16
t0lik
Ivan писал(а):Причину проблемы нашли и устранили.
Исправление будет включено в следующий предрелизный билд от 29 Июня.
Отлично, как только выйдет - проверю.

вопрос по StiReport.GetReportFromAssembly

Добавлено: 01 июл 2009, 06:59
t0lik
t0lik писал(а):Отлично, как только выйдет - проверю.
Проверил. Теперь мастер-отчет все нормально выводит из подотчетов.
Но теперь другая проблема - если первый подотчет скомпилировать в DLL, а остальные подотчеты загружать уже из нее.
то при печати только первый подотчет печатается нормально, а остальные - без данных.

вопрос по StiReport.GetReportFromAssembly

Добавлено: 01 июл 2009, 07:03
t0lik
t0lik писал(а):Но теперь другая проблема - если первый подотчет скомпилировать в DLL, а остальные подотчеты загружать уже из нее.
то при печати только первый подотчет печатается нормально, а остальные - без данных.
Но есть ньюанс. Если рендерить подотчеты каждый отдельно, а потом и мастер-отчет отрендерить , то тогда все нормально.