Методы StiDataTableSource.SetSort и StiDataTableSource.SetFilter

Обсуждение Stimulsoft Reports.NET
Ответить
couragic
Сообщения: 13
Зарегистрирован: 08 май 2008, 08:53
Откуда: Россия, Санкт-Петербург

Методы StiDataTableSource.SetSort и StiDataTableSource.SetFilter

Сообщение couragic »

Необходимо в коде шаблона отчета установить фильтр на источник данных, который есть в словаре данных отчета.

Для этого вроде предназначены методы SetSort() и Setfilter() класса StiDataTableSource, от которого наследуются источники данных отчета.
Непонятно как работать с этими методами.

1. SetFilter
Такой пример:

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

private void FilterData(object sender, StiFilterEventArgs e)
{									
    e.Value = false;
}
		
private void BandSetFilter()
{					
    data.SetFilter(new StiFilterEventHandler(FilterData)); 	
}
Метод BandSetFilter() вызывается в событии Report.BeginRenderEvent().

data - это источник данных из стандартного примера PrintTable

Метод FilterData почему-то никогда не вызывается.

2. SetSort
В документации Stimulsoft Reports.Net Class Reference вроде ошибки в описании этого метода.

Не могли бы Вы привести пример его использования.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Методы StiDataTableSource.SetSort и StiDataTableSource.SetFilter

Сообщение Edward »

Используйте, пожалуйста, следующий подход для сортировки данных:

StiDataBand dataBand = report.GetComponents()["DataBand1"] as StiDataBand;
dataBand.Sort = new System.String[] {
"DESC",
"CompanyName"};
report.Render();

Для того, чтобы осуществить фильтрацию, объявите, пожалуйста собственную функцию в коде отчкета и возвращайте bool значение для нее в зависимости от фильтруемых данных.

Спасибо.


couragic
Сообщения: 13
Зарегистрирован: 08 май 2008, 08:53
Откуда: Россия, Санкт-Петербург

Методы StiDataTableSource.SetSort и StiDataTableSource.SetFilter

Сообщение couragic »

Спасибо за ответ.

С сортировкой получилось и с фильтром тоже. Правда с фильтром не совсем так, как Вы написали, а вот так (BandSetFilter() выполняется в событии Report.BeginRenderEvent):

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

		private void FilterData(object sender, StiFilterEventArgs e)
		{					
			if (data.Column1 != "1")				
		    	        e.Value = true;
			else
				e.Value = false;
		}
				
		private void BandSetFilter()
		{					
		    DataBand.FilterMethodHandler += new StiFilterEventHandler(FilterData); 	
		}	
Так работает. А про функцию, которая должна возвращать bool я не совсем понял - куда ее передавать чтобы, она осуществляла фильтрацию данных. Поясните, пожалуйста.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Методы StiDataTableSource.SetSort и StiDataTableSource.SetFilter

Сообщение Edward »

Да, Ваш подход абсолютно верный. Также возможно было объявить собственную функцию как метод отчета и вызывать её в Expression выражении фильтра у DataBand. Функция должна возвращать логическое выражение.

Пожалуйста, смотрите пример во вложении. Функция MyFunction() объявлена в закладке CodeTab отчета.

http://forumru.stimulsoft.com/upload/re ... filter.zip

Спасибо.
couragic
Сообщения: 13
Зарегистрирован: 08 май 2008, 08:53
Откуда: Россия, Санкт-Петербург

Методы StiDataTableSource.SetSort и StiDataTableSource.SetFilter

Сообщение couragic »

Спасибо за пример. Все понятно.
Edward
Сообщения: 930
Зарегистрирован: 09 июн 2006, 12:23

Методы StiDataTableSource.SetSort и StiDataTableSource.SetFilter

Сообщение Edward »

Дайте знать, если понадобится помощь.

Спасибо.
Ответить