Пример 8. Объекты в ячейках

Top  Previous  Next

Используя объекты, внедренные в ячейки матрицы, можно получить разнообразные визуальные эффекты. Покажем на следующем примере, как нарисовать простую шкалу, показывающую уровень продаж сотрудника.

 

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

 

поле Year добавьте в заголовок строки;
поле Name добавьте в заголовок колонки;
поле Revenue добавьте в ячейку матрицы.

 

Настройте внешний вид матрицы следующим образом:

 

matrixExample8

 

Теперь добавим в ячейку со значением Revenue 3 объекта "Фигура". Эти объекты будут выполнять роль индикатора следующим образом:

 

если значение в ячейке меньше 100, показывается один объект красного цвета;
если значение в ячейке меньше 3000, показывается два объекта желтого цвета;
если значение в ячейке больше или равно 3000, показывается три объекта зеленого цвета.

 

Матрица теперь выглядит так:

 

matrixExample8_1

 

Чтобы управлять состоянием объектов, создадим обработчик события BeforePrint ячейки матрицы. Для этого выделите ячейку Revenue, в окне "Свойства" нажмите кнопку btn79 и сделайте двойной щелчок на событии BeforePrint. FastReport создаст пустой обработчик события и переключится на закладку "Код". Напишите в обработчике следующий код:

 

private void Cell4_BeforePrint(object sender, EventArgs e)

{

  // В нашем примере ячейка имеет имя Cell4. 

 

  // Получим значение ячейки, которое содержится в свойстве Cell4.Value. 

  // Часть ячеек в нашей матрице будут пустыми, учтем это (проверка на null).

  // Значение надо привести к типу decimal, потому что исходное поле данных [MatrixDemo.Revenue] 

  // имеет тип System.Decimal.

  decimal value = Cell4.Value == null ? 0 : (decimal)Cell4.Value;

  

  // Shape1..3 - это объекты "Фигура"

  // Включаем или выключаем объекты в зависимости от значения: 

  // один объект, если значение < 100; два, если оно < 3000; три, если оно >= 3000

  Shape1.Visible = true;

  Shape2.Visible = value >= 100;

  Shape3.Visible = value >= 3000;

  

  // Выбираем цвет: красный < 100; желтый < 3000; зеленый >= 3000

  Color color = Color.Red;

  if (value >= 100)

    color = Color.Yellow;

  if (value >= 3000)

    color = Color.GreenYellow;

    

  // устанавливаем цвет для всех трех объектов

  Shape1.Fill = new SolidFill(color);  

  Shape2.Fill = new SolidFill(color);  

  Shape3.Fill = new SolidFill(color);  

}

 

Если запустить отчет, мы увидим следующее:

 

matrixExample8Result