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


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

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

Уж если сильно принципиальная хотелка, можно вручную отрисовать данные в стринггриде. Но этот способ требует знаний выше, чем обладает задающий подобные вопросы :)
...
Рейтинг: 0 / 0
02.11.2017, 12:31:28
    #39546645
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть строки в Grid-e на прежнее место
ДокТекущее положение строки (читай, записи) в гриде зависит от отсортированного датасета.
Ключевое поле меняется в очень редких случаях. :)
...
Рейтинг: 0 / 0
02.11.2017, 13:53:19
    #39546710
Vlad_567
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть строки в Grid-e на прежнее место
Грид - 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
02.11.2017, 14:04:13
    #39546720
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть строки в Grid-e на прежнее место
Задача лишёна смысла, поскольку после переоткрытия данных их количество может измениться, особенно в многопользовательской среде.
В продвинутых гридах есть свойство TopRow, которое запоминается, а затем устанавливается
...
Рейтинг: 0 / 0
02.11.2017, 15:15:53
    #39546770
Dunkin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как вернуть строки в Grid-e на прежнее место
Vlad_567,

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

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

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

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

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

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


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