Я написал программку, которая запускает любые отчеты стимула. Это удобно тем, что я могу прислать клиенту *.mrt-файл, он разместит его в удобном для него месте в иерархии каталогов, хранящих данные файлы и дело сделано. Программа состоит из тривью (иерархия каталогов, содержащих *.mrt-файлы) и листвью (собственно отображение *.mrt-файлов). Двойным кликом файлы открываются.
Проблема вот в чем:
Строка подключения, работающая у меня, не будет работать у клиента, т.к. у него она будет другая.
Т.о. нужна возможность программного изменения (в случае необходимости) в *.mrt-файлах строки подключения.
В общих чертах я пошел по такому пути:
На событие инициализации отчета (BeginRenderEvent) я повесил код, проверяющий возможность подключения:
Если подключение выполнено успешно, выводится окно запроса параметров:Stimulsoft.Report.Dictionary.StiSqlDatabase cnn =
(Stimulsoft.Report.Dictionary.StiSqlDatabase) this.Dictionary.Databases["Соединение"];
//MessageBox.Show(cnn.ConnectionString);
using (SqlConnection sqlcnn = new SqlConnection (cnn.ConnectionString))
{
try{sqlcnn.Open();}
catch {MessageBox.Show("Не удалось подключиться к базе данных. Проверьте правильность строки подключения.", "Внимание!");
frmParametres.Visible = false;
frmConnect.Visible = true;
}
sqlcnn.Close();
}
Если таковая возможность отсутствует, то видимость окна, запрашивающего параметры устанавливается в false, а включается видимость др. окна, в котором у юзера запрашивается верная строка подключения:
Введенная строка проверяется повторно. Если все нормально - строка подключения сохраняется.
Затем юзеру предлагается перезапустить отчет.
Код по замене строки подключения выглядит так:
Однако, как оказалось изменения не сохраняются в исходном *.mrt-файле. Видимо оно происходит применительно к объекту отчета, созданному на основе этого файла. Как сделать это изменение в исходном *.mrt-файле?Stimulsoft.Report.Dictionary.StiSqlDatabase cnn =
(Stimulsoft.Report.Dictionary.StiSqlDatabase) this.Dictionary.Databases["Соединение"];
cnn.ConnectionString=textConnect.Text;
using (SqlConnection sqlcnn = new SqlConnection (cnn.ConnectionString))
{
try{sqlcnn.Open();}
catch {MessageBox.Show("Не удалось подключиться к базе данных. Проверьте правильность строки подключения.", "Внимание!");
return;
}
sqlcnn.Close();
}
frmConnect.Close();
MessageBox.Show("Подключение прошло успешно. Перезапустите отчёт.", "Успешная операция.");