Текущий архив: 2003.10.06;
Скачать: 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 вся ветка
Текущий архив: 2003.10.06;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.007 c