Несколько вопросов по объекту Matrix

отредактировано 01:52 Раздел: FastReport .NET
Пример.
У меня есть некая таблица с повторяющимися значениями:
      data.Rows.Add(new object[] { "Elem 1", "Group 1", 25 });
      data.Rows.Add(new object[] { "Elem 1", "Group 1", 25 });
      data.Rows.Add(new object[] { "Elem 1", "Group 1", 25 });
Все работает нормально при функции "Сумма" для кросс-таблицы. При задании функции "Количество" движок в самих ячейках все равно выводит сумму. Количество считает в итогах, но только для неповторяющихся значений (в этом примере он выведет единицу). Вот код примера:
<?xml version="1.0" encoding="utf-8"?>
<Report ReportInfo.Created="04/15/2009 17:58:18" ReportInfo.Modified="04/15/2009 18:03:59" ReportInfo.CreatorVersion="1.0.201.0">
  <scriptText>using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using FastReport;
using FastReport.Data;
using FastReport.Dialog;
using FastReport.Barcode;
using FastReport.Table;
using FastReport.Utils;

namespace FastReport
{
  public class ReportScript
  {

    private void ReportTitle1_BeforePrint(object sender, EventArgs e)
    {
      DataTable data = new DataTable();

      data.Columns.Add("name", typeof(string));
      data.Columns.Add("group", typeof(string));
      data.Columns.Add("value", typeof(int));

      // 3 значения !!
      data.Rows.Add(new object[] { "Elem 1", "Group 1", 25 });
      data.Rows.Add(new object[] { "Elem 1", "Group 1", 25 });
      data.Rows.Add(new object[] { "Elem 1", "Group 1", 25 });

      data.Rows.Add(new object[] { "Elem 2", "Group 2", 25 });
      data.Rows.Add(new object[] { "Elem 3", "Group 3", 25 });
      data.Rows.Add(new object[] { "Elem 4", "Group 4", 25 });

      Report.RegisterData(data, "data");
    }
  }
}
</ScriptText>
  <Dictionary>
    <TableDataSource Name="data" ReferenceName="data" Enabled="true">
      <Column Name="name" DataType="System.String"/>
      <Column Name="group" DataType="System.String"/>
      <Column Name="value" DataType="System.Int32"/>
    </TableDataSource>
  </Dictionary>
  <ReportPage Name="Page1">
    <ReportTitleBand Name="ReportTitle1" Width="718.2" Height="198.45" BeforePrintEvent="ReportTitle1_BeforePrint">
      <MatrixObject Name="Matrix1" Left="37.8" Top="66.15" Width="160.51" Height="58.68" FixedRows="1" FixedColumns="1" DataSource="data">
        <MatrixColumns>
          <Header Expression="[data.group]"/>
        </MatrixColumns>
        <MatrixRows>
          <Header Expression="[data.name]"/>
        </MatrixRows>
        <MatrixCells>
          <Cell Expression="[data.value]" Function="Count"/>
        </MatrixCells>
        <TableColumn Name="Column1" Width="54.46" AutoSize="true"/>
        <TableColumn Name="Column2" Width="57.5" AutoSize="true"/>
        <TableColumn Name="Column3" Width="48.55" AutoSize="true"/>
        <TableRow Name="Row1" Height="19.56" AutoSize="true">
          <TableCell Name="Cell1" Border.Lines="All" Text="name" HorzAlign="Center" VertAlign="Center" Font="Arial, 10pt, style=Bold"/>
          <TableCell Name="Cell2" Border.Lines="All" Text="[group]" HorzAlign="Center" VertAlign="Center" Font="Arial, 10pt, style=Bold"/>
          <TableCell Name="Cell7" Border.Lines="All" Text="Итого" HorzAlign="Center" VertAlign="Center" Font="Arial, 10pt, style=Bold"/>
        </TableRow>
        <TableRow Name="Row2" Height="19.56" AutoSize="true">
          <TableCell Name="Cell3" Border.Lines="All" Text="[name]" HorzAlign="Center" VertAlign="Center" Font="Arial, 10pt, style=Bold"/>
          <TableCell Name="Cell4" Border.Lines="All" Text="[value]" HorzAlign="Right" VertAlign="Center"/>
          <TableCell Name="Cell8" Border.Lines="All" HorzAlign="Right" VertAlign="Center"/>
        </TableRow>
        <TableRow Name="Row3" Height="19.56" AutoSize="true">
          <TableCell Name="Cell5" Border.Lines="All" Text="Итого" HorzAlign="Center" VertAlign="Center" Font="Arial, 10pt, style=Bold"/>
          <TableCell Name="Cell6" Border.Lines="All" HorzAlign="Right" VertAlign="Center"/>
          <TableCell Name="Cell9" Border.Lines="All" HorzAlign="Right" VertAlign="Center"/>
        </TableRow>
      </MatrixObject>
    </ReportTitleBand>
  </ReportPage>
</Report>

Комментарии

  • отредактировано 01:52
    Очень хотелось бы, чтобы стиль EvenStyle тоже использовался при форматировании кросс-таблицы.
  • отредактировано 01:52
    При форматировании кросс-таблицы сортировка идет только по полям, которые фигурируют в итогах. Можно ли сделать сортировку по другому полю для строк и столбцов? Пример: в строках я указываю выводить итоги по некому полю Name (тип string), но сортировку хочу по другому полю SortOrder (тип int). То же самое в столбцах.

    Спасибо.
  • отредактировано 01:52
    1) поправлю,
    2) добавлю,
    3) так нельзя. Сортируйте данные до подачи в матрицу, при этом сортировку в матрице можно отключить.
  • отредактировано 01:52
    Спасибо. Хорошо буду сортировать до вывода в отчет.

Оставить комментарий

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.