Возможно неправильная работа IIF

Обсуждение Stimulsoft Reports.NET
Ответить
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Возможно неправильная работа IIF

Сообщение Леонид »

Доброго времени суток, уважаемые!

Делал отчёт и обнаружил, что команда IIF не работает, вернее работает некорректно.

В приложении сделал примитивный отчёт, который показывает ошибку:

Expression in Text property of 'Text1' can't be evaluated! startIndex cannot be larger than length of string. Parameter name: startIndex

В отчёте стоит выражение {IIF(BoolVar, Var1, Substring(Var1, 20, 5))}. При этом BoolVar = true, а Var1 = 'Тестовая строка' (15 символов).

Ошибка возникает, видимо по причине того, что IIF cначала вычисляет значение, которое выводится, если BoolVar = true, а потом сразу вычисляет (не понятно зачем, из-за этого и возникает ошибка) Substring(Var1, 20, 5), которое я поставил намеренно. То есть, если поставить туда Div или что-либо ещё, оно также будет вычисляться, что неправильно, т.к. вычисляться должна именно та часть, кот. подходит под условие (true или false), что логично.
Вложения
string_error.mrt
(3.89 КБ) 308 скачиваний
Ivan
Сообщения: 641
Зарегистрирован: 10 авг 2006, 05:40
Откуда: Stimulsoft Office

Возможно неправильная работа IIF

Сообщение Ivan »

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

IIF и другие команды, которые можно использовать в выражениях - это функции.
В текстовом редакторе они и представлены в дереве в разделе Functions.
При вызове функции все аргументы рассчитываются до вызова функции, а уже потом передаются в функцию.
Поэтому вам необходимо модифицировать ваше условие, чтобы не возникало исключений:

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

{IIF(BoolVar, Var1 + new string(' ', 25), Substring(Var1, 20, 5))}
или, если вы используете C#

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

{BoolVar ? Var1 : Substring(Var1, 20, 5)}
Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

Возможно неправильная работа IIF

Сообщение Леонид »

Да, всё работает во втором варианте, т.е. с использованием тернарной операции.

{BoolVar ? Var1 : Substring(Var1, 20, 5)}

Благодарю за помощь!

Andrew
Сообщения: 586
Зарегистрирован: 09 июн 2006, 12:22

Возможно неправильная работа IIF

Сообщение Andrew »

Всегда рады помочь Вам.
Ответить