Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Номер выделенной строки в гриде. [D6, IB6.x]


Bishop ©   (2002-10-09 11:18:00) 

Уважаемые мастера! Делаю автообновление грида с помощью переоткрытия датасета. Необходимо, чтобы после обновления сохранилось местоположение выделенной записи в гриде. Сейчас, если сделать locate по ключу записи, то она "прыгает" вниз грида,даже если до обновления она была посередине.


Bishop   (2002-10-09 12:33:00) [1]

AM, спасибо, очень интересная идея.

Desdechado, вниз.


Johnmen   (2002-10-09 12:24:00) [2]

>Bishop

Подумай хорошенько, а надо ли тебе это ?
Если решишь, что надо, то поднимай архивы форума за последние 4 месяца - было предложено решение, причем работающее...
(Если сильно напрягусь, может и вспомню сам...:))


AM   (2002-10-09 12:09:00) [3]

>> выделенная строка после обновления смещается вниз.

если всегда только вниз смещается, то тут что-то другое... чем я предполагал...
делается ли (меняется) сортировка во время обновления, может в этом причина?

и еще ответь на вопрос: Desdechado © (09.10.02 11:58)


Desdechado   (2002-10-09 11:58:00) [4]

вниз грида или вниз относительно отображаемого прошлого положения?


AM   (2002-10-09 11:50:00) [5]

Если делать только locate, то после обновления картина в гриде будет меняться, т. к. locate при отображении в гриде всегда пытаеся найденную запись поставить в середину грида (если для этого хватает записей).

Есть такое Protected свойство Row с ним надо играть.

type
TMyGrid = class (TDBGrid)
public
property IndicatorOffset;
property Row;
end;

Незнаю кто как решал эту задачу, а я решил тем что написал 3 процедуры, 1 b 2-ая сохраняют в переменные информацию о состоянии грида, а вторая восстанавливает после обновления первоначальное состояние Grid-a.
Принцип такой:
DMDocs.QueryWorker.DisableControls;
LocVal:= DMDocs.QueryWorker.FieldValues["ID"];
Row_Up:= ReadRowUp(DBGrid1);
Row_Down:= ReadRowDown(DBGrid1);
DMDocs.QueryWorker.Active:= False;
DMDocs.QueryWorker.Active:= True;
DMDocs.QueryWorker.Locate("ID", LocVal, []);
RestoreRow(Row_Up, Row_Down, DBGrid1);
DMDocs.QueryWorker.EnableControls;


Bishop   (2002-10-09 11:46:00) [6]

Desdechado, я так и делаю. Но выделенная строка после обновления смещается вниз.

Sergey13, да :))


Desdechado   (2002-10-09 11:32:00) [7]

1. положение строки в гриде зависит от способа выбора данных, сортировок и т.д.
2. locate делать лучше при Dataset.DisableControls, а после locate - EnableControls, тогда не будет мелькания


Sergey13   (2002-10-09 11:32:00) [8]

Уж не ты ли мечтал сделать видимыми текущие изменения, сделанные другими пользователями? Ты? Ну ты щас завалишь всех вопросами.
8-)


Наверх

Титульная страница Поиск, карта сайта Написать письмо