powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как вернуть строки в Grid-e на прежнее место
12 сообщений из 12, страница 1 из 1
Как вернуть строки в Grid-e на прежнее место
    #39546515
Vlad_567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть DBGridEh.
В программе делаются некоторые операции с данными (меняются значения некоторых строк, программа пробегает по строкам и меняет их, при этом строки смещаются вверх/вниз в гриде), после чего нужно вернуть строки в то-же положение, как они были до этих операций, т.е. та строка которая была в гриде первой - должна остаться так-же первой.


Как такое сделать?
Как узнать какая строка отображается в гриде самой верхней и как сместить строки, чтобы нужная строка стала первой в гриде?
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546516
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Данные расположены хаотично, или всё же есть СОРТИРОВКА
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546518
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad_567Как такое сделать?
1. DisableControls
2. Запомнить позицию и затем вернуть.
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546552
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понял, что Вам нужно сохранить позицию скролла в гриде? Какой у Вас грид?
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546556
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad_567Как такое сделать?
Как узнать какая строка отображается в гриде самой верхней и как сместить строки, чтобы нужная строка стала первой в гриде?Зависит от датасета. Если это мемТейблЭх, то в сортируемом поле (должно быть указано в свойствах) нужно поставить правильный порядок сортировки. Т.е. чтоб модификации не затрагивали поле сортировки. Тогда порядок сохранится.
В БД-датасетах нужно просто переоткрыться с указанием правильной сортировки.
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546618
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad_567Как такое сделать?
имхо, задача нерешаема в принципе. Ибо в "дбгриде данных нет" ©.

Текущее положение строки (читай, записи) в гриде зависит от отсортированного датасета. Поменяешь данные сортируемого поля, поменяешь их порядок.

Уж если сильно принципиальная хотелка, можно вручную отрисовать данные в стринггриде. Но этот способ требует знаний выше, чем обладает задающий подобные вопросы :)
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546645
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокТекущее положение строки (читай, записи) в гриде зависит от отсортированного датасета.
Ключевое поле меняется в очень редких случаях. :)
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546710
Vlad_567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Грид - DBGridEh, датасет - RxMemoryDataSet.
Ключевое поле есть, оно не меняется. В программе данные в строках (не по ключевому полю) меняются местами. При этом данные в гриде передвигаются вверх/вниз. Нужно их как-то вернуть так-же как они были.

Пример кода:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
begin
  //Заполнил датасет данными
  RxMemoryData1.Open;
  for i:=0 to 100 do
  begin
    RxMemoryData1.Append;
    RxMemoryData1.Edit;
    RxMemoryData1.FieldByName('id').AsInteger:=i;
    RxMemoryData1.FieldByName('name').AsString:='Name_'+IntToStr(i);
    RxMemoryData1.Post;
  end;

end;

procedure TForm1.Button2Click(Sender: TObject);
var id:integer;
begin
  //Перед выполнением этого кода переместился приблизительно на середину данных (курсор и скрол в гриде стоят приблизительно посередине)
  RxMemoryData1.DisableControls;
  id:=RxMemoryData1.FieldByName('id').AsInteger;
  RxMemoryData1.Last;
  RxMemoryData1.First;
  RxMemoryData1.Locate('id',id,[]);
  RxMemoryData1.EnableControls;
  //После выполнения курсор в таблице встал на ту-же строку с данными, но сама строка стала самой нижней, а перед выполнением кода она была в середине грида
end;



На картинке: первая картинка - это в аком положении курсор, вторая картинка - после нажатия на кнопку Button2
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546720
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача лишёна смысла, поскольку после переоткрытия данных их количество может измениться, особенно в многопользовательской среде.
В продвинутых гридах есть свойство TopRow, которое запоминается, а затем устанавливается
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546770
Dunkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vlad_567,

Попробуй DBGridEh.SaveBookmark, DBGridEh.RestoreBookmark
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39546788
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanКлючевое поле меняется в очень редких случаях. :)
ТС в стартовом посте не сказал, по какому полю сортирует записи

DunkinПопробуй DBGridEh.SaveBookmark, DBGridEh.RestoreBookmark
тынц

Vlad_567При этом данные в гриде передвигаются вверх/вниз
они не могут двигаться "вверх/вниз", если данные по сортируемому полю у тебя не меняются.

Я так понимаю, тебе нужен фокус на той же записи. Тогда, наверное, надо перефразировать вопрос правильно.
...
Рейтинг: 0 / 0
Как вернуть строки в Grid-e на прежнее место
    #39547088
Vlad_567
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DunkinVlad_567,

Попробуй DBGridEh.SaveBookmark, DBGridEh.RestoreBookmark

Большое спасибо, этот вариант помог.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как вернуть строки в Grid-e на прежнее место
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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