Components for Delphi and C++ Builder.

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

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: 07 июн 2019, 12:13 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
Добрый
Вложение:
1.png
1.png [ 1.24 KiB | Просмотров: 687 ]

Подскажите, плз, как определить, что активная строка грида является "виртуальной" строкой узла группы (DataGrouping = True), а не строкой с фактическими данными?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 07 июн 2019, 14:06 
Не в сети

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

Используйте свойство DBGridEh1.DataGrouping.CurDataNode

Код:
procedure TfrDataGrouping.Button1Click(Sender: TObject);
begin
//   TGroupDataTreeNodeTypeEh = (dntDataSetRecordEh, dntDataGroupEh, dntDataGroupFooterEh);
  if (DBGridEh1.DataGrouping.CurDataNode.NodeType = dntDataSetRecordEh) then
    ShowMessage('Текущая строка - Запись в DataSet')
  else if (DBGridEh1.DataGrouping.CurDataNode.NodeType = dntDataGroupEh) then
    ShowMessage('Текущая строка - Заголовок группы')
  else if (DBGridEh1.DataGrouping.CurDataNode.NodeType = dntDataGroupFooterEh) then
    ShowMessage('Текущая строка - Футер группы');
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 11 июн 2019, 14:49 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
Спасибо.
Подскажите ещё, плз. При определённых состояниях необходимо сбрасывать текущую строку грида с виртуального заголовка группы на реальную строку датасета. Сейчас сделано так:
Код:
grid.DataSource.DataSet.RecNo := grid.DataSource.DataSet.RecNo;

Вроде, работает, сдается мне, что это не очень верно. А как правильней?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 июн 2019, 13:43 
Не в сети

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

Данный код должен работать корректно т.к. при выборе в гриде групповой записи
грид переводит текущую позицию в DataSet'е на первую запись которая отображается в группе.

Можно использовать следующий более "системный" код:

type
TDBGridEhCrack = class(TDBGridEh);

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  RecDataNode: TGroupDataTreeNodeEh;
begin
  if (DBGridEh1.DataGrouping.CurDataNode.NodeType = dntDataGroupEh) then
  begin
    RecDataNode := DBGridEh1.DataGrouping.CurDataNode.Items[0];
    if RecDataNode.NodeType = dntDataSetRecordEh then
    begin
      TDBGridEhCrack(DBGridEh1).CheckSetCurGroupDataNode(RecDataNode, True);
    end;
  end;
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 13 июн 2019, 14:19 
Не в сети

Зарегистрирован: 15 авг 2018, 07:39
Сообщений: 106
Спасибо. Такой код стабильней, чем "фиктивное" присвоение RecNo.


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

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


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

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


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

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