Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 23 апр 2024, 10:28

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
СообщениеДобавлено: 20 май 2020, 14:32 
Не в сети

Зарегистрирован: 26 мар 2019, 13:05
Сообщений: 3
Здравствуйте.
В программе на Delphi c помощью SQL запроса к таблице Oracle получаю в гриде отображение 8 колонок данных.
Настройками параметров компонента DBGridEh получаю 2 уровня группировки по двум полям с промежуточными суммами по группам в каждом уровне по заданным колонкам, и с общим итогом по этим колонкам в соответствующих футерах.
Как получить (к примеру в Memo.lines или в виде таблицы) значения сумм из всех футеров групп всех уровней?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 22 июн 2020, 20:56 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

Для доступа к элементам группировки данных используйте дерево группировки - DBGridEh1.DataGrouping.GroupDataTree
Для обхода дерева используйте методы GroupDataTree.GetFirst, GroupDataTree.GetNext
Для определения типа ветки используйте свойство Node.NodeType (dntDataSetRecordEh - запись данных ДатаСета, dntDataGroupEh - Заголовок группы, dntDataGroupFooterEh - футер группы.

Вот примерный код обхода дерева и Демо проект.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  I: Integer;
  GroupDataTree: TGridGroupDataTreeEh;
  Node: TGroupDataTreeNodeEh;
  Field: TField;
  s: String;
begin
  DBMemoEh1.Lines.Clear;
  DBMemoEh1.Lines.BeginUpdate;

  GroupDataTree := DBGridEh1.DataGrouping.GroupDataTree;

  Node := GroupDataTree.GetFirst;

  while Node <> nil do
  begin
    s := StringOfChar(' ', (Node.Level - 1) * 2);
    if (Node.NodeType = dntDataSetRecordEh) then
    begin
      Field := DBGridEh1.Columns[DBGridEh1.SelectedIndex].Field;
      MemTableEh1.InstantReadEnter(Node.DataSetRecordViewNo);
      s := s + 'DataRow Level: FieldValue = ' +
        VarToStr(MemTableEh1.Rec.DataValues[Field.FieldName, dvvValueEh]);
      MemTableEh1.InstantReadLeave;
    end else if (Node.NodeType = dntDataGroupEh) then
    begin
      s := s + 'GroupTitle: Level - ' + IntToStr(Node.Level) +
        ', Value - ' + Node.DisplayValue;
    end else if (Node.NodeType = dntDataGroupFooterEh) then
    begin
      s := s + 'GroupFooter: Level - ' + IntToStr(Node.Level);
      s := s + ', FooterValue - ' + VarToStr(Node.FooterValues[DBGridEh1.SelectedIndex]);
    end;

    DBMemoEh1.Lines.Add(s);

    Node := GroupDataTree.GetNext(Node);
  end;

  DBMemoEh1.Lines.EndUpdate;
end;


Вложения:
GroupingTreeTraversing.zip [7.41 KiB]
Скачиваний: 78
sshot-118.png
sshot-118.png [ 68.66 KiB | Просмотров: 890 ]

_________________
Best regards
EhLib support Team
Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB