Кажется понял в чем дело.
Если имя редактируемого файла передается в параметре командной строки, я открываю файл на редактирование так:
Код: Выделить всё
Report = new StiReport();
Report.Load(fileName);
Report.Design();
При этом автосохранение не работает. Если файл открыть через интерфейс Вашего редактора File -> Open, то автосохранение работает.
Что-то можно сделать, чтобы автосохранение работало и в случае, если отчет был загружен через Report.Load?
Команда File->Save работает в этом сценарии, свойство <ReportFile> задано в .mrt файле.
Еще могу похвастаться, прикрутил к Вашем движку поддержку считывания нескольких датасетов из хранимых процедур MS SQL Server.
Процедуры, возвращающие несколько наборов данных, я объявляю со свойством "ConnectOnStart" = false и инициализирую их из Report.BeforeRender примерно так:
Код: Выделить всё
void ReadDataFromStoredProc(StiReport report, StiSqlSource sp)
{
using (var dta = new SqlDataAdapter(CreateSqlCommand(sp)))
{
var ds = new DataSet {Locale = CultureInfo.CurrentUICulture};
var canDisposeDataset = true;
try
{
dta.Fill(ds);
report.RegData(sp.SqlCommand, ds);
canDisposeDataset = false;
}
finally
{
if (canDisposeDataset)
{
ds.Dispose();
}
}
}
}
И в связи с этим еще один вопрос.
Можно ли вызывать Dispose() у класса System.Data.DataSet, который я передал здесь в метод RegData() отчета?
Или же вызов метода Dispose() приведет проблемам с этим датасетом в отчете?
Другими словами, копирует ли метод RegData() переданный ему DataSet?