Вниз
Скачать: 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.014 c
3-18224
Denizzz
2003-09-17 09:07
2003.10.06
Как правильно отловить выбранную ячейку в DBGrid


14-18620
DProg
2003-09-17 17:10
2003.10.06
QuickReport->Word


7-18647
Dmitriy
2003-07-22 00:43
2003.10.06
---|Ветка была без названия|---


14-18616
Skywalker
2003-09-17 16:28
2003.10.06
Юмор: Тест на профпригодность


7-18650
DAT
2003-07-22 16:11
2003.10.06
Параметры печати, установки принтера, свойства документа?




   Наверх