powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перечитать TCxGrid и TcxTreeGrid ?
25 сообщений из 25, страница 1 из 1
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879106
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пжл, как правильно перечитывать сетки от ДевЭкспресс ?

Например, есть сетка связанная с набором данных.
Рядом, кнопка - "Удалить", которая удаляет в БД запись(или несколько), и перечитывает набор данных.

Как сделать так, что бы курсор(выделенная строка в сетке) перемещалась на ближайшую нижестоящую запись, а не прыгала в начало набора данных?
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879112
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под "ближайшей нижестоящей строкой" имеется ввиду та строка, в зависимости от выбранной пользователем сортировки.
Например - по дате или по имени.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879113
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BКак сделать так, что бы курсор(выделенная строка в сетке) перемещалась на ближайшую нижестоящую запись, а не прыгала в начало набора данных?
После удаления, видимо, датасет закрывается и открывается?
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879115
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запоминать и вручную восстанавливать после изменения данных -- FocusedNode, VisibleIndex, Next/Prev Node и т.п.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879134
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПосле удаления, видимо, датасет закрывается и открывается?
Да.
Не надо этого делать ?

JaDiЗапоминать и вручную восстанавливать после изменения данных -- FocusedNode, VisibleIndex, Next/Prev Node и т.п.
Да, я думал об этом.
Но что делать дальше ?

Нижняя какая именно нижняя строка зависит от режима сортировки.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879137
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BДа.
Иногда в этом необходимость бывает, но...
Потому встречный вопрос - зачем закрывать/открывать?

Датасет именно так и ведет себя, когда удаляется запись - скрывает "удаленную" и не скачет курсором в начало.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879144
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПотому встречный вопрос - зачем закрывать/открывать?

В случае перечитывания, набор данных может заполнятся запросом с любым из JOINов. Как изменятся колонки может сказать только сервер.
Например - Кнопка "Добавить 1000р". Она сделает 2 операции - снятие и начисление. Вообщем, где то уменьшится на 1000, а где то увеличится.

При удалении строки такое тоже может быть, например если есть сумма нарастающим итогом, или просто сумма.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879150
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще, в Microsoft Outlook аналогичная механика.
В нём курсор не прыгает туда-сюда и ведёт себя по человечески.

При этом, письма можно упорядочить по любой из колонок, и курсор всегда переходит на нижнюю строку в зависимости от сортировки.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879157
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BНижняя какая именно нижняя строка зависит от режима сортировки.
У cxgrid есть records (записи из датасета) и rows (сами строки в гриде -- именно они и зависят от сортировки, и их и надо искать/запоминать).
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879161
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
if DeleteLine() then begin   // удаляем строчку своим запросом
  DS.Next;                   // ставим курсор на следующую стоку
  NewId := DS['Id'];         // запоминаем номер строки
  ReloadData;                // перечитываем данные грида
  DS.Locate('Id', NewId,[]); // позиционируемся на "следующей" строке
end;
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879167
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr
Код: pascal
1.
2.
if DeleteLine() then begin   // удаляем строчку своим запросом
  DS.Next;                   // ставим курсор на следующую стоку


После удаления датасет уже на другой строке.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879169
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Не верно.
DS.Next переходит на следующую запись набора данных.
И не совпадает с сортировкой на экране у пользователя.
А в случае дерева, она может переместиться вообще не понятно куда.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879170
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanПосле удаления датасет уже на другой строке.
Чего датасет на другой строке, если
Код: pascal
1.
 // удаляем строчку своим запросом
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879189
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrwadmanПосле удаления датасет уже на другой строке.
Чего датасет на другой строке, если
Код: pascal
1.
 // удаляем строчку своим запросом


Не заметил, согласен.

Всё равно скачёк будет, потому что locate не учитывает положение грида в целом (верхняя видимая запись). Плюс там может быть не десяток строк, а тысячи и более, как иногда многим нравится делать.

Тут нужен огород из кастомного датасета, который на все действия дергает свои запросы. В т.ч. и/или процедуры.
Или датасает в памяти.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879190
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
//DS.Next; 
X := cxView.DataController.FocusedRowIndex+1; // следующая строка
Id := cxView.DataController.Values[ColumnId.Index];


Id := cxTreeList1.FocusedNode.GetNext.Values[ColumnID.Index]


Плюс проверки, что текущая не последняя
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879203
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

Это для CxGrid.
Ок, попробую.
Наверное FocusedRowIndex+1 неправильно.
т.к. при перечитывании может удалится и он, т.е. 2 и более записей.

А для CxTreeGrid ?
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879301
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BА для CxTreeGrid ?
Не знаю такого компонента
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879352
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BПодскажите пжл, как правильно перечитывать сетки от ДевЭкспресс ?
Это большой вопрос. Детальный ответ зависит от режима грида, специфики данных и кучи деталей.

Valery_BКак сделать так, что бы курсор(выделенная строка в сетке) перемещалась на ближайшую нижестоящую запись, а не прыгала в начало набора данных?
1. Открыть холодильник.
2. Достать жирафа.
3. Положить слона.

Ээ... пардон... очевидно,

1. Переместиться на нижестоящую запись
2. Обновить данные, оставаясь на текущей записи.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879354
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BВообще, в Microsoft Outlook аналогичная механика.
В нём курсор не прыгает туда-сюда и ведёт себя по человечески.
В Microsoft Outlook нет непредсказуемых join-ов.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879379
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrValery_BА для CxTreeGrid ?
Не знаю такого компонента
Точнее, TcxDBTreeList

В нём и обычном гриде есть ещё одна не понятность.
Если даже при перечитывании Focused Node - сохраняется, то теряется скролл.

Например,
в гриде - 100 строк, на экране помещается только 50(видны строки 1-50).
Я выделяю строку с id=25, которая сейчас посередине экрана
Перечитываю, количество строк не изменилось.
Фокус остаётся на строке 25, но она перемещается наверх экрана(видны строки 25-75).
т.е. скролл уходит вниз
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879398
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_BВ нём и обычном гриде

Только в TcxDBTreeList
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879422
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дереве, после удаления, позиционируйтесь на узле-Родителе.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879426
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не хотите перечитывать дерево, загружайте в TcxTreeList и удаляйте узлы вручную
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879428
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrВ дереве, после удаления, позиционируйтесь на узле-Родителе.
Да я так и делаю... и узел перескакивает из середины наверх экрана.
...
Рейтинг: 0 / 0
Как перечитать TCxGrid и TcxTreeGrid ?
    #39879511
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valery_B,

дык, в трилисте вообще проще простого -- достаточно запомниться TopVisibleNode/Index (или какое там название) и его же восстанавливать после выделения следующей записи и ее визуального фокусирования через MakeVisibleNode (или какое там название команды для перехода к текущему FocusedNode).

Т.е. процедура удаления:
- запомнили ID для удаления;
- запомнили ID следующей записи, на которую надо сделать фокус после удаления;
- запомнили TopVisibleIndex (по сути - текущий скролл трилиста);
- удалили;
- нашли следующее ID, сделали фокус и выделили запись;
- сделали автопрокрутку к ней по MakeVisibleNode;
- восстановили TopVisibleIndex (с некоторой проверкой, чтобы не переборщить).
- уряяя, всё работает.
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как перечитать TCxGrid и TcxTreeGrid ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]