Перейти к содержанию

Выражения: различия между версиями

Материал из Химсофт Вики
Строка 129: Строка 129:
==Обращение к источникам данных==
==Обращение к источникам данных==


Для обращения к полям источников данных используется следующая форма записи:
'''Пример 1.''' Обращение к полям источников данных:


<syntaxhighlight lang="C#">
<syntaxhighlight lang="C#">
Строка 135: Строка 135:
</syntaxhighlight>
</syntaxhighlight>


Имя источника отделяется от имени поля точкой, например:
'''Пример 2.''' Имя источника отделяется от имени поля точкой, например:


<syntaxhighlight lang="C#">
<syntaxhighlight lang="C#">
Строка 141: Строка 141:
</syntaxhighlight>
</syntaxhighlight>


Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (relation). Подробнее о связях рассказано в главе "Данные". Например, так можно обратиться к полю связанного источника данных:
'''Пример 3.''' Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (<code>relation</code>).  


<syntaxhighlight lang="C#">
<syntaxhighlight lang="C#">
Строка 147: Строка 147:
</syntaxhighlight>
</syntaxhighlight>


Рассмотрим следующий пример использования полей в выражении:
'''Пример 4.''' Операции с полями одинаковых типов данных.


<syntaxhighlight lang="C#">
<syntaxhighlight lang="C#">
Строка 153: Строка 153:
</syntaxhighlight>
</syntaxhighlight>


Здесь надо сделать важное замечание. Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом. В следующем примере мы попробуем использовать поле Employees.Age числового типа, что приведет к ошибке:
Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом.  
 
'''Пример 5.''' Операции с полями разных типов данных.
 
В следующем примере мы попробуем использовать поле <code>Employees.Age</code> числового типа, что приведет к ошибке:


<syntaxhighlight lang="C#">
<syntaxhighlight lang="C#">
Строка 165: Строка 169:
</syntaxhighlight>
</syntaxhighlight>


В данном случае мы обращаемся с полем Employees.Age так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид:
В данном случае мы обращаемся с полем <code>Employees.Age</code> так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид:


<syntaxhighlight lang="C#">
<syntaxhighlight lang="C#">
Строка 171: Строка 175:
</syntaxhighlight>
</syntaxhighlight>


Как видно, FastReport при компиляции выражений заменяет обращения к полям данных следующим образом:
Как видно, дизайнер при компиляции выражений заменяет обращения к полям данных следующим образом:


<code>[Employees.FirstName]</code> --> <code>(string)(Report.GetColumnValue("Employees.FirstName"))</code>
<code>[Employees.FirstName]</code> --> <code>(string)(Report.GetColumnValue("Employees.FirstName"))</code>

Версия от 09:07, 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, которая возвращает номер текущей страницы отчета. Она заключена в квадратные скобки.

Обращение к источникам данных

Пример 1. Обращение к полям источников данных:

[Имя источника.Имя поля]

Пример 2. Имя источника отделяется от имени поля точкой, например:

[Employees.FirstName]

Пример 3. Имя источника может быть составным в случае, если мы обращаемся к источнику данных, используя связь (relation).

[Products.Categories.CategoryName]

Пример 4. Операции с полями одинаковых типов данных.

[Employees.FirstName] + " " + [Employees.LastName]

Каждое поле имеет определенный тип данных - он задается в свойстве DataType поля (его можно увидеть в окне "Свойства", если предварительно выбрать поле данных в окне "Данные"). От того, какой тип имеет поле, зависит, каким образом его можно использовать в выражении. Так, в примере выше, оба поля (имя и фамилия) имеют строковый тип и поэтому их допустимо использовать таким образом.

Пример 5. Операции с полями разных типов данных.

В следующем примере мы попробуем использовать поле Employees.Age числового типа, что приведет к ошибке:

[Employees.FirstName] + " " + [Employees.Age]

Ошибка происходит потому, что нельзя напрямую складывать строку и число. Для этого число надо явным образом преобразовать в строку:

[Employees.FirstName] + " " + [Employees.Age].ToString()

В данном случае мы обращаемся с полем Employees.Age так, будто это целочисленная переменная. Так оно и есть. Мы уже знаем, что все выражения компилируются в исполняемый код. Все нестандартные с точки зрения компилятора вещи (вроде обращения к системным переменным и полям данных) конвертируются в другой вид, понятный компилятору. Так, последнее выражение будет преобразовано в следующий вид:

(string)(Report.GetColumnValue("Employees.FirstName")) + " " + (int)(Report.GetColumnValue("Employees.Age")).ToString()

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

[Employees.FirstName] --> (string)(Report.GetColumnValue("Employees.FirstName"))

[Employees.Age] --> (int)(Report.GetColumnValue("Employees.Age"))

То есть, мы можем использовать поле БД в выражениях, как будто это переменная, имеющая определенный тип.

Например, следующее выражение вернет первый символ имени сотрудника:

[Employees.FirstName].Substring(0, 1)

Обращение к системным переменным

Обращение к итоговым значениям

Обращение к параметрам отчета