Есть следующая проблема.
Словарь представляет собой дерево баз, как в Sql Server Management Studio.
"Базы" (Sql соединения) формируются при помощи StiReport.RegData(string, SqlConnection).
Затем на каждую таблицу создается StiSqlSource и добавляется в StiReport.Dictionary.DataSources:
Код: Выделить всё
StiSqlSource sss = new StiSqlSource(key, dt.TableName, dt.TableName, string.Format("SELECT * FROM [{0}]", dt.TableName));
_report.Dictionary.DataSources.Add(sss);
sss.SynchronizeColumns();
Отчет формируется на этом словаре и сохраняется. Затем при открытии отчета (StiReport.LoadPackedReportFromString) заново вызывается StiReport.RegData(string, SqlConnection) для каждого соединения.
Появилась необходимость в возможности переименования "баз". Вроде бы, ничего сложного: есть метод RegData с третим параметром alias. Отоображать только алиасы тоже можно. Оказалось, если вызывать RegData с алиасом, отличающимся от того, что был до этого в отчете (но с тем же именем!), то в словаре будут отображаться и "база" со старым именем, и "база" с новым. При этом отчет формируется правильно.
Попробовал изменить атрибут NameInSource для всех измененных элементов в StiReport.DataSources - в словаре стало отображаться _как надо_, но вот отчет теперь не формируется.
Либо где-то ошибка в Sti, либо я в корне неверно понимаю формирование словаря.
Есть подозрение, что ошибка все-таки в методе StiDictionaryControl.BuildData(StiDictionary), так как там в качестве ключа хэш-таблицы используется алиас.
Спасибо.