Страница 1 из 1
Как обратиться в значению компанентa Text1
Добавлено: 16 авг 2016, 15:42
aquilax
Как обратиться в значению компанентa Text1 при задании выражения для Text2?
У меня есть два текстовых компонента на странице Text1 и Text2.
В первом выводится буква "В" или буква "Я" или компонент остается пустым в зависимости от дня недели
(мы пытаемся создать табель). (рис. прикреплен)
Во втором текстовом компоненте необходимо выполнить алгоритм :
Если Text1 - это пустое поле, то к переменной SUM прибавляем единицу и выводим ее в Text2, если в Text1 - буква, то ничего не делаем.
Я не могу догнать, как во втором текстовом компоненте обратиться к первому?
В дальнейшем у меня будет аж 30 ячеек, подобных Text1, и в Text2 нужно будет пройти по всем ним и отразить такую сумму - переменную SUM
Подскажите, пожалуйста, я впервые сталкиваюсь в программными элементами в Стимулсофте, не могу понять как и где их применять.
Re: Как обратиться в значению компанентa Text1
Добавлено: 16 авг 2016, 17:45
HighAley
Здравствувйте.
Хочу сразу вам пояснить, что существует два типа компонентов. Один компонент -- это компонент шаблона отчёта. Он содержит выражение и получить какое-либо зхначение здесь невозможно.
Второй тип компонента -- это компонент построенного отчёта. Они собержат конечное значение, но таких компонентов может быть очень много.
Поэтому единственный выход это получить значение в процессе построения отчёта.
Есть несколько вариантов, чтобы получит значение текстового компонента.
1. Это использовать такое же выражение. Это самый простой и очевидный вариант. Подходит при простых выражениях.
2. Сохраянть значение в переменную. Это вариант для случая, когда надо просуммировать какие-то значения, но можно и использовать значение переменной в других компонентах. Выражение может иметь следующий вид:
Значение будет присвоено и переменной, и компоненту.
3. Значение можно получить в событии Get Value. Ho значение будет уже в виде строки.
4. Более сложный вариант. В некоторых случаях только этот вартант помогает выйти из положения. Особенно когда надо изменить значение компонента, который уже помтроен.
Это захранить
sender в событии
Get Value в переменную типа
object. Это будет ссылка наконкретный экземпляр построенного отчёта. После этого можно обращаться к этому экземпляру и изменять его значение.
Можно хранить значения в переменной типа
List, создавать
HashTable с компонентами их значениями и т.д.
Надеюсь один из вариантов вам подойдёт.
Спасибо.
Re: Как обратиться в значению компанентa Text1
Добавлено: 17 авг 2016, 10:00
aquilax
Спасибо за развернутый ответ!
Мне показалось, что можно поиграть с выражениями и максимально упростить логику, чтобы не влезать в GetValue и прочие премудрости.
вроде бы даже красиво всё бы работало, но возникла проблема.
Как в ячейке Text ничего не выводить, но при этом произвести операцию SUM=SUM+1
Приведу упрощенный пример проекта во вложении.
В ячейках написаны выражения, где в зависимости от даты, выводится "0" (в выходной) или НУЖНО ВЫВОДИТЬ "" (null) в будний день и произвести суммирование SUM=SUM+1. Но при такой записи это не работает, суммирование происходит абсолютно всегда, даже если выражение попадает под другое условие - под выходной. А если попадает под условие буднего дня, то надо просуммировать и вывести в ячейку "" , что никак не получается.
В крайней правой ячейке, которая стоит отдельно, выводим саму переменную SUM (по сути это сумма пустот).
Сейчас там выводится 3, а мне при текущих входных параметрах надо получить там 1
Подскажите, как заставить работать код правильно?
Re: Как обратиться в значению компанентa Text1
Добавлено: 18 авг 2016, 08:45
aquilax
Уважаемые, гуру, подскажите, пожалуйста!
Растолкуйте...
У меня никак не получается решить эту задачу.
Re: Как обратиться в значению компанентa Text1
Добавлено: 18 авг 2016, 11:33
HighAley
Здравствуйте.
Все аргументы функций вычисляются перед её вызовом.
Попробуйте использовать событие Before Print компонентов.
Там вы можете писать любой код для суммирования.
Спасибо.
Re: Как обратиться в значению компанентa Text1
Добавлено: 18 авг 2016, 14:37
aquilax
А вы не могли бы подсказать, как именно в свойстве Before Print, скажем, компонента Text2, сделать проверку, какое значение у Text1, что-то вроде:
if (this.Text1.Text=="X") { }
Но наверное, я неправильно обращаюсь к Text1.Text, потому что это не работает.
Благодарю за помощь!
Re: Как обратиться в значению компанентa Text1
Добавлено: 19 авг 2016, 22:46
Jan
Здравствуйте.
В данном случае, нужно обратиться или к выражению, которое выичсляется в свойстве Text. Например, if (Customers.Name == "X"). Или воспользоваться событием GetValue компонента текст:
if (e.Value == "X")...
Спасибо.