Выражения: различия между версиями
Sidminik (обсуждение | вклад) |
Sidminik (обсуждение | вклад) |
||
| Строка 131: | Строка 131: | ||
Для обращения к полям источников данных используется следующая форма записи: | Для обращения к полям источников данных используется следующая форма записи: | ||
<syntaxhighlight lang="C#"> | |||
[Имя источника.Имя поля] | [Имя источника.Имя поля] | ||
</syntaxhighlight> | |||
Имя источника отделяется от имени поля точкой, например: | Имя источника отделяется от имени поля точкой, например: | ||
<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] | [Employees.FirstName] | ||
</syntaxhighlight> | |||
Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (relation). Подробнее о связях рассказано в главе "Данные". Например, так можно обратиться к полю связанного источника данных: | Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (relation). Подробнее о связях рассказано в главе "Данные". Например, так можно обратиться к полю связанного источника данных: | ||
<syntaxhighlight lang="C#"> | |||
[Products.Categories.CategoryName] | [Products.Categories.CategoryName] | ||
</syntaxhighlight> | |||
Рассмотрим следующий пример использования полей в выражении: | Рассмотрим следующий пример использования полей в выражении: | ||
<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] + " " + [Employees.LastName] | [Employees.FirstName] + " " + [Employees.LastName] | ||
</syntaxhighlight> | |||
Здесь надо сделать важное замечание. Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом. В следующем примере мы попробуем использовать поле Employees.Age числового типа, что приведет к ошибке: | Здесь надо сделать важное замечание. Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом. В следующем примере мы попробуем использовать поле Employees.Age числового типа, что приведет к ошибке: | ||
<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] + " " + [Employees.Age] | [Employees.FirstName] + " " + [Employees.Age] | ||
</syntaxhighlight> | |||
Ошибка происходит потому, что нельзя напрямую складывать строку и число. Для этого число надо явным образом преобразовать в строку: | Ошибка происходит потому, что нельзя напрямую складывать строку и число. Для этого число надо явным образом преобразовать в строку: | ||
<syntaxhighlight lang="C#"> | |||
[Employees.FirstName] + " " + [Employees.Age].ToString() | [Employees.FirstName] + " " + [Employees.Age].ToString() | ||
</syntaxhighlight> | |||
В данном случае мы обращаемся с полем Employees.Age так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид: | В данном случае мы обращаемся с полем Employees.Age так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид: | ||
(string)(Report.GetColumnValue("Employees.FirstName")) + " " + | <syntaxhighlight lang="C#"> | ||
(int)(Report.GetColumnValue("Employees.Age")).ToString() | (string)(Report.GetColumnValue("Employees.FirstName")) + " " + (int)(Report.GetColumnValue("Employees.Age")).ToString() | ||
</syntaxhighlight> | |||
Как видно, FastReport при компиляции выражений заменяет обращения к полям данных следующим образом: | Как видно, FastReport при компиляции выражений заменяет обращения к полям данных следующим образом: | ||
[Employees.FirstName] --> (string)(Report.GetColumnValue("Employees.FirstName")) | <code>[Employees.FirstName]</code> --> <code>(string)(Report.GetColumnValue("Employees.FirstName"))</code> | ||
<code>[Employees.Age]</code> --> <code>(int)(Report.GetColumnValue("Employees.Age"))</code> | |||
То есть, мы можем использовать поле БД в выражениях, как будто это переменная, имеющая определенный тип. | |||
Например, следующее выражение вернет первый символ имени сотрудника: | |||
<syntaxhighlight lang="C#"> | |||
[Employees.FirstName].Substring(0, 1) | [Employees.FirstName].Substring(0, 1) | ||
</syntaxhighlight> | |||
==Обращение к системным переменным== | ==Обращение к системным переменным== | ||
Версия от 09:01, 19 октября 2026
Выражение – это строка кода на языке C#, которая возвращает какое-либо значение.
Так, объект Текст может содержать выражения, обрамленные квадратными скобками.
Пример:
[2 + 2]
Редактор выражений
Редактор выражений - предназначен для удобства написания выражения и может вызываться в тех местах интерфейса дизайнера, где поддерживается ввод выражений.

Редактор выражений представляет собой окно, в котором можно ввести текст выражения и вставить в него элементы из окна Данные:

Обращение к объектам отчета
Пример 1. Высота объекта Text1 (обращение по имени):
Text1.Height
Пример 2. Имя файла, из которого был загружен отчет (использование переменной Report):
Report.FileName
Пример 3. Название отчета (обращение к вложенным свойствам объекта):
Report.ReportInfo.Name
Использование функций .NET
Вы можете использовать любые объекты .NET в выражениях.
Пример: использование функции Max:
Math.Max(5, 10)
Сборки .NET
По умолчанию отчет использует следующие сборки .NET:
System.dll
System.Drawing.dll
System.Windows.Forms.dll
System.Data.dll
System.Xml.dll
Вам доступны все объекты .NET, объявленные в этих сборках.
Если вам нужно получить доступ к другой сборке, добавьте ее название в список сборок отчета.
Это можно сделать в меню Отчет|Свойства…, выбрав в окне элемент Скрипт.

Например, если вы хотите использовать в отчете функцию, объявленную в вашем приложении, добавьте ссылку на сборку приложения (.exe или .dll) в список сборок отчета.
Обращение к функциям
После этого можно обращаться к функции, используя пространство имени (namespace) вашего приложения. Например, если в приложении определена следующая функция:
namespace Demo
{
public static class MyFunctions
{
public static string Func1()
{
return "Hello!";
}
}
}
Обратиться к ней в отчете можно так:
Demo.MyFunctions.Func1()
Если добавить в скрипт директиву using Demo, это позволит укоротить форму обращения к функции:
MyFunctions.Func1()
Для обращения к переменным или функциям, которые были вами определены в скрипте отчета, используйте имя переменной или функции:
myPrivateVariableThatIHaveDeclaredInScript
MyScriptFunction()
Использовать в выражении можно функции, которые возвращают значение.
Обращение к данным отчета
Помимо стандартных языковых элементов, в выражениях можно использовать следующие элементы отчета:
- поля источников данных;
- системные переменные;
- итоговые значения;
- параметры отчета.
Все эти элементы содержатся в окне Данные.
Любой из этих элементов можно использовать в выражении, заключив его в квадратные скобки. Например:
[Page] + 1
Это выражение возвращает номер следующей печатаемой страницы.
В выражении используется системная переменная Page, которая возвращает номер текущей страницы отчета. Она заключена в квадратные скобки.
Обращение к источникам данных
Для обращения к полям источников данных используется следующая форма записи:
[Имя источника.Имя поля]
Имя источника отделяется от имени поля точкой, например:
[Employees.FirstName]
Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (relation). Подробнее о связях рассказано в главе "Данные". Например, так можно обратиться к полю связанного источника данных:
[Products.Categories.CategoryName]
Рассмотрим следующий пример использования полей в выражении:
[Employees.FirstName] + " " + [Employees.LastName]
Здесь надо сделать важное замечание. Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом. В следующем примере мы попробуем использовать поле Employees.Age числового типа, что приведет к ошибке:
[Employees.FirstName] + " " + [Employees.Age]
Ошибка происходит потому, что нельзя напрямую складывать строку и число. Для этого число надо явным образом преобразовать в строку:
[Employees.FirstName] + " " + [Employees.Age].ToString()
В данном случае мы обращаемся с полем Employees.Age так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид:
(string)(Report.GetColumnValue("Employees.FirstName")) + " " + (int)(Report.GetColumnValue("Employees.Age")).ToString()
Как видно, FastReport при компиляции выражений заменяет обращения к полям данных следующим образом:
[Employees.FirstName] --> (string)(Report.GetColumnValue("Employees.FirstName"))
[Employees.Age] --> (int)(Report.GetColumnValue("Employees.Age"))
То есть, мы можем использовать поле БД в выражениях, как будто это переменная, имеющая определенный тип.
Например, следующее выражение вернет первый символ имени сотрудника:
[Employees.FirstName].Substring(0, 1)