Вниз
Скачать: CL | DM;

Такая вот загадка про DBGRID   Найти похожие ветки 

← →
MonsterKot   (2003-09-16 07:47) [0]

Проблемя в следующем:
Данные у клиента отображаются в гриде, клиенту необходимо освежить данные (может быть по разным причинам), для этого приходится закрывать и затем снова открывать запрос. Что бы клиент не потерял текущую запись (с которой он возможно работал),
позиционируем на нее курсор используя метод Locate. Все вроде нормально, но хотелось бы сделать что бы в гриде курсор не перепрыгивал на последнюю запись, а оставался на месте.

Может кто подскажет как это сделать?


← →
Alexandr ©   (2003-09-16 08:57) [1]

как это на последнюю запись?
Тыж locate делаешь...


← →
Johnmen ©   (2003-09-16 09:19) [2]

DisableControls
EnableControls


← →
roottim   (2003-09-16 10:22) [3]

procedure RefreshDataSet(ADataSet: TDataSet);
var bm: TBookMarkStr;
begin
if ADataSet.Active then
begin
bm := ADataSet.BookMark;
ADataSet.Close;
ADataSet.Open;
try
ADataSet.BookMark := bm;
except
ShowMessage("А НЕТУ ЕЁ");
end;
end;
end;


пример: RefreshDataSet(Grid1.DataSouerce.DataSet);


← →
Johnmen ©   (2003-09-16 10:29) [4]

>roottim

Никаких гарантий, что встанет на ту же запись.


← →
MonsterKot   (2003-09-16 10:33) [5]

Я имею в виду если у клиента запись в гриде была скажем пятая (в самом датасете это может быть 1000 запись), то после рестарта запроса и locate она становится последней т.е. курсор прыгает по гриду на последнюю запись, что сбивает с толку пользователя.
A DisableControls и EnableControls это я самосабой делаю.

Это проявляется если записей в запросе больше, чем может отобразиться в гриде.

Я пробовал это вылечить, но у грида отсутствует свойство - колличество отображаемых строк. Его можно было бы получить из TCustomDBGrid.DataLink.BufferCount но это свойство Protected.
Посмотреть его можно только в отладчике!


← →
MonsterKot   (2003-09-16 10:36) [6]


> roottim

Через BookMark нельзя однозначно, если запрос закрывается и открывантся вновь! Это и в хелпе написано!


← →
don-do   (2003-09-16 10:55) [7]

Объяви свой тип
Type
TMyGrid = class(TDBGrid);
в модуле где процедура.
И теперь ты имеешь доступ ко всем защищенным методам, пример:
n := TMyGrid(DBGrid1).Row;


← →
Johnmen ©   (2003-09-16 11:20) [8]

Теперь понятно...
Такой вопрос уже когда-то был. Ответ с примером могу выслать.


← →
GWW   (2003-09-16 11:26) [9]

Я делаю сдедующим образом:

procedure RefreshDataSet
var
nId: integer;
begin
nId:=ADOQuery.FieldByName("id").Value;
ADOQuery.Close;
ADOQuery.Open;
if not ADOQuery.Locate("id",nId,[]) then
ADOQuery.First;
end;

где id - уникальное поле.


← →
MonsterKot   (2003-09-17 04:36) [10]


> Johnmen © (16.09.03 11:20) [8]
> Теперь понятно...
> Такой вопрос уже когда-то был. Ответ с примером могу выслать.


Буду рад примеру, можно на мыло:super-kot@roskhb.ru
Спасибо!



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

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.011 c
1-18295
Niobe
2003-09-24 10:27
2003.10.06
Уважаемые мастера, не подскажете как избавиться отVCL60.bpl & RTL


4-18677
Pauk
2003-07-31 13:43
2003.10.06
OnMouseDown


9-18213
Denton
2003-03-30 17:00
2003.10.06
glut in Delphi


14-18571
iNew
2003-09-18 16:42
2003.10.06
Кто знает какую-нибудь прогу для общего тестирования системы.


1-18324
GreySerg
2003-09-23 19:33
2003.10.06
Почему не работает такая конструкция ?




   Наверх