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

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

Добавлено: 08 май 2008, 12:01
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 вроде ошибки в описании этого метода.

Не могли бы Вы привести пример его использования.

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

Добавлено: 08 май 2008, 14:16
Edward
Используйте, пожалуйста, следующий подход для сортировки данных:

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

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

Спасибо.



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

Добавлено: 10 май 2008, 12:32
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 я не совсем понял - куда ее передавать чтобы, она осуществляла фильтрацию данных. Поясните, пожалуйста.

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

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

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

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

Спасибо.

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

Добавлено: 12 май 2008, 05:21
couragic
Спасибо за пример. Все понятно.

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

Добавлено: 12 май 2008, 06:10
Edward
Дайте знать, если понадобится помощь.

Спасибо.