Страница 1 из 1

Программное изменение запроса в источнике данных

Добавлено: 13 янв 2009, 05:07
Сергей
Здравствуйте!

Есть отчет (StiReport), необходимо изменить текст SQL запроса для одного из источников. А именно, добавить к запросу ограничение where.
Код

Код: Выделить всё

(report.DataSources[dsName] as StiSqlSource).SqlCommand = query;
отрабатывает, но компиляция (report.Compile) не удается:
Изображение

В дизайнере такой отчет выглядит нормально, но предварительный просмотр не работает (скриншот какраз оттуда).

Замена всего словаря (StiReport.Dictionary) дает такой же результат.

Как решить эту проблему?
Спасибо.

Программное изменение запроса в источнике данных

Добавлено: 13 янв 2009, 06:35
Edward
Здравствуйте.

Попробуйте добавить в словарь строковую переменную MyVariable и запрос будет выглядеть так:

select * from Categories {MyVariable}

В MyVariable может быть:

where ID = 5

В runtime Вы можете присвоить переменную после компиляции:

report["MyVariable"] = "where ID = 5";


Спасибо.

Программное изменение запроса в источнике данных

Добавлено: 13 янв 2009, 10:19
Сергей
Спасибо, получилось. Так даже удобней.

Программное изменение запроса в источнике данных

Добавлено: 16 янв 2011, 10:04
eLVik
Есть еще один способ - через код.

Код: Выделить всё

        public Report()
        {
            this.InitializeComponent();
            this.ModifySQL();
        }

        void ModifySQL()
        {
	      // Убираем запрос, сгенерированный дизайнером
	      this.DataSource1.Connecting -= this.GetDataSource1_SqlCommand;
	      // вместо этого ставим свой обработчик...
          this.DataSource1.Connecting += new System.EventHandler(this.GetDataSource1_SqlCommand2);			
        }
		
        void GetDataSource1_SqlCommand2(object sender, System.EventArgs e)
	{
	   if (someVar == 1)
	        this.DataSource1.SqlCommand = "запрос1"
	     else	
		  this.DataSource1.SqlCommand = "запрос2";
			
	   // Здесь может быть инициализация параметров.
	}