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

Обсуждение Stimulsoft Reports.NET
Ответить
Сергей
Сообщения: 70
Зарегистрирован: 13 окт 2008, 03:56
Откуда: Пермь
Контактная информация:

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

Сообщение Сергей »

Здравствуйте!

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

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

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

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

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

Как решить эту проблему?
Спасибо.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

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

Сообщение Edward »

Здравствуйте.

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

select * from Categories {MyVariable}

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

where ID = 5

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

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


Спасибо.
Сергей
Сообщения: 70
Зарегистрирован: 13 окт 2008, 03:56
Откуда: Пермь
Контактная информация:

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

Сообщение Сергей »

Спасибо, получилось. Так даже удобней.
eLVik
Сообщения: 54
Зарегистрирован: 26 окт 2010, 07:45
Откуда: Сыктывкар, Республика Коми

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

Сообщение 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";
			
	   // Здесь может быть инициализация параметров.
	}
Ответить