![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Номер выделенной строки в гриде. [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-)