Кстати, для чего наряду с Report.IsCompiled существует Report.NeedsCompiling ???
По - моему это только вводит дополнительные проблемы...
например, при проверке только Report.IsCompiled:
Код: Выделить всё
Report = StiReport.GetReportFromAssembly(AssemblyPath, true); // по идее загружается уже скомпилированный отчет, НО...
if (Report.IsCompiled) // = false
{
Report[name] = value; // Этот оператор не будет выполнен
}
if (!Report.IsCompiled) // Report.IsCompiled = false
{
Report.Compile(); // А тут вовсе возникнет исключение, поскольку отчет уже скомпилирован
}
И методом проб и ошибок я пришел к тому, что лучше использовать такую проверку
Код: Выделить всё
if (forDesign || !File.Exists(AssemblyPath) || recompile)
{
Report.Load(ReportPath);
if (!forDesign)
{
PrepareData(true); //вызывается перед компиляцией, поскольку некоторые
//переменные могут быть неопределены и это вызовет ошибку при компиляции
Report.Compile(AssemblyPath, StiOutputType.ClassLibrary, true);
}
}
else
{
Report = StiReport.GetReportFromAssembly(AssemblyPath, true);
}
..............
..............
if (Report.IsCompiled||!Report.NeedsCompiling)
{
Report[name] = value;
}
else..................