Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.14;
Скачать: CL | DM;

Вниз

DBGrid   Найти похожие ветки 

 
som   (2002-10-21 12:07) [0]

Имеется DBGrid1 связаный с IBQuery1. Допустим я изменил данные в строке, расположенной в середине видимой области DBGrid-а.
После я запоминаю номер этой строки no:= Form1.IBQuery1.RecNo;
делаю :
Form1.IBQuery1.Active:=false;
Form1.IBQuery1.Active:=true;
Form1.IBQuery1.RecNo:=no;
Но при этом отредактированная строка перемещается и становиться самой верхней в видимой области DBGrid-а. Как более умно :)) сделать подобную процедуру перечитки данных, чтобы избежать вышеупомянутого скачка редактируемой строки ????


 
ЮЮ ©   (2002-10-21 12:18) [1]

1) Зачем переоткрывать, если запись изменил ты?
2) Запомнить 1-ю, посдеднюю и текущую запись. В этой же последовательности пытыться позиционироваться. В этом случае, полагаю, DBGrid.DataLink будет такой же, как и перед закрытием.


 
som   (2002-10-21 15:39) [2]

1) Затем переоткрывать, что это клиент к базе и находится он на многих машинах...
2) Нельзя ли по подробнее изложить фразу :"В этой же последовательности пытыться позиционироваться", это как раз и будет ответ на мой вопрос.....


 
Nikolay M. ©   (2002-10-21 17:04) [3]

1) А может ты редактируешь поле, которое указано в ORDER BY? Или сортировка по времени последнего редактирования записи, если есть такое поле? Тогда после переоткрытия НД строка, которая раньше была "текущей" может оказаться где угодно.

2) А Bookmark-и в IBQuery существуют? Сам не знаю, не работал...


 
ЮЮ ©   (2002-10-22 03:53) [4]

>Нельзя ли по подробнее изложить фразу :"В этой же последовательности пытыться позиционироваться", это как раз и будет ответ на мой вопрос.....

DBGrid отображает несколько строк НД, к которым имеет доступ через DataLink, который содержит все строки от первой, отображаемой в гриде, до последней, отображаемой в нём. Если посмотреть текст Draw DBGrida, можно увидеть, как он получает доступ к видимым в гриде записям.

Теперь, если запомнить ключевые поля первой и последней видимых в гриде записей и после переоткрытия запроса сделать Locate на первую, а затем на последнюю, то рамка DataLink должна совпасть с той, что была до обновления запроса.


 
som   (2002-10-23 14:05) [5]

А какая процедура прорисовки DBGrida, как она называется ?


 
ЮЮ ©   (2002-10-24 04:31) [6]

TCustomDBGrid.DrawCell (модуль DBGrids)
TRxDBGrid.DrawCell (модуль RXDBCtrl)
TCustomDBGridEh.DrawCell (модуль DBGridEh)


 
som   (2002-10-24 11:27) [7]

так DrawCell прорисовывает только одну ячейку грида, как там можно отследить первую видимую строку и последнюю ?????


 
ЮЮ ©   (2002-10-24 11:51) [8]

if ARow >= 0 then begin
OldActive := FDataLink.ActiveRecord;
try
FDatalink.ActiveRecord := ARow;
....
finally
FDatalink.ActiveRecord := OldActive;
end;
end;

АRow, как и FDatalink.ActiveRecord, в DBGrid-е принимает значение от 0 до кол-во видимых строк.

P.S. Datalink в стандартном DBGride - protected, а в TRxDBGrid и TCustomDBGridEh - public



Страницы: 1 вся ветка

Текущий архив: 2002.11.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.023 c
14-46120
^Sanya
2002-10-27 00:03
2002.11.14
Существует ли обратная совместимость Delphi7->Delphi6 ?


3-45737
ShooRoop
2002-10-24 15:02
2002.11.14
Проблема с составлением запроса


3-45664
Леший
2002-10-23 17:43
2002.11.14
Создание базы


3-45694
Slava
2002-10-28 14:02
2002.11.14
Сохранение изминений в БД


14-46094
greenrul
2002-10-26 11:00
2002.11.14
Уравнение движения тела, брошенного под углом