Пытаюсь реализовать наследование отчетов.
Цель - чтобы можно было шапку и подвал у 50 отчетов править в одном месте, а не в 50 отчетах.
Создал обычным дизайнером базовый отчет, в котором разместил интересующие меня компоненты.
Я правильно понял, что этот базовый отчет надо в дизайнере сохранить командой "CSharp Classes for Inherited Reports (*.cs)"?
Эта команда создает класс вида:
Код: Выделить всё
public class MyStiReport : Stimulsoft.Report.StiReport
{
public MyStiReport()
{
this.InitializeComponent();
this.MasterReport = "<?xml version=\"1.0\" ...............</StiSerializer>";
}
#region StiReport Designer generated code - do not modify
private void InitializeComponent()
{
}
#endregion StiReport Designer generated code - do not modify
}
Где в строке MasterReport описаны все созданные мной компоненты.
Далее, создал проект, копию вашего "Custom Designer".
Подключаю в этот проект только что сохраненный мною MyStiReport.
В проекте код:
Код: Выделить всё
StiOptions.Engine.BaseReportType = typeof(Reports.MyStiReport);
var report = new MyStiReport();
report.Design();
Открывается дизайнер, в нем видны элементы из MyStiReport, к сожалению, недоступные для редактирования. Допустим, у меня в отчетах есть параметр, обычно он называется "Начало отчетного периода", но в паре отчетов он называется "Отчетная дата". Было бы удобно в базовом отчете назвать параметр (Variable) так, как он называется в большинстве отчетов, а в паре нетипичных отчетов переименовать его.
А далее самое интересное - я сохраняю отчет в .mrt файл и вижу, что все определения компонентов объявлены в этом вновь сохраняемом файле явно, без всяких ссылок на MyStiReport.
Единственно, в секции кода, есть строка
Код: Выделить всё
public class Report : Reports.MyStiReport
{
}
Которая появляется за счет StiOptions.Engine.BaseReportType = typeof(Reports.MyStiReport);
Однако, так как все компоненты не унаследованы, а скопированы из MyStiReport, я не достигаю того, чего хотел бы: если в шапке отчета что-то поменяется, то правка этой шапки в MyStiReport.cs мне ничего не даст - все 50 отчетов никак особо не связаны с этим файлом.
Т.е. у меня получилось не наследование отчетов, а просто какой-то одноразовый шаблон отчета.
Это фишка с "наследованием" так и задумана, или я что-то не правильно делаю?