![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
DBGrid
cf © (2002-12-23 18:47:00)Всем привет!
Есть некий DataSet и отображающий его DBGrid.
После выполнения следующих действий:
DataSet.DisableControls;
.....
.....
DataSet.EnableControls;
активная строка таблицы помещается в середину DBGrid"а, т.е. происходит скачек курсора. Можно каким либо образом оставить неизменным положение активной строки в DBGrid"е после DataSet.EnableControls?
Спасибо.
TTCustomDelphiMaster (2002-12-30 17:47:00) [1]http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1041093851&n=1
cf (2002-12-24 12:12:00) [2]>Anatoly Podgoretsky ©
Спорить не буду, но исходники DBGrid"a гляну...
Anatoly Podgoretsky (2002-12-24 12:05:00) [3]Это один из вариантов, но в других случаях будет перерасчет отображения DBGrid тут ничего не поделаешь
cf (2002-12-24 11:56:00) [4]>Anatoly Podgoretsky © (24.12.02 07:29)
>Зачем такие мучения, лазий в отдельном наборе данных
Анатолий, ваш вариант решит проблему, но в моем случае он мне не нравится...
cf (2002-12-24 11:54:00) [5]Конечно, спасибо за такое количество ответов, но они не на тот вопрос, который я задал.
>MsGuns
DataSource я отрубать не могу, т.к. работаю с DBase, через Apollo, а не через BDE. Тем более, что проблемы это не решит...
Вопрос в седующем:
Допустим, что DBGrid по высоте отображает 9 строк таблицы БД. Активная строка находится третьей снизу. После DisableControls/EndblrControls позиция этой же самой строки становится 5-ой, т.е. она переносится в середину DBGrid"a. Т.е. порядок записей и активный курсор в таблице БД отсаются прежними, просто Грид после EnableControls располагает активную запись в середине своего окна. А мне хочентся, что бы как она была 3-ей снизу, так там и оставалась...
Anatoly Podgoretsky (2002-12-24 07:29:00) [6]Зачем такие мучения, лазий в отдельном наборе данных
MsGuns (2002-12-23 20:49:00) [7]Для того, чтобы "полазить" по НД и не оставить следов метод Disable/EnableControls не всегда хорош (например, его нельзя использовать на детальном НД). Я делаю проще:
Var
ds: TDataSource;
bm: TBookMark;
begin
ds := Grid1.DataSource;
Grid1.DataSource := nil; // Грид перестает реагировать на НД
Table1.GetBookMark(bm);
Table1.First;
....
Table1.GotoBookMark(bm);
Table1.FreeBookMark(bm);
Grid1.DataSource := ds; // Грид показывает что и показывал
end;
gsu (2002-12-23 19:30:00) [8]Все я пас, помоему тут позиция курсора в БД и активная строка таблицы "одно и то же". И !!! у мя ничего не скачет, если Paradox, то RecNo, иначе лучше Bookmark
cf (2002-12-23 19:19:00) [9]>gsu © (23.12.02 19:13)
У меня нет проблем с сохранением позиции курсора в БД. Неважно, что я буду использовать TBookmarkStr или TBookmark...
Проблема с отображением активной строки таблицы в DBGrid"е после EnableControls. Она помещается в середину DBGrid"a
gsu (2002-12-23 19:13:00) [10]А с закладками работают так:
procedure TForm1.CopyDataClick(Sender: TObject);
var
SavePlace: TBookmark;
PrevValue: Variant;
begin
withClientDataSet1 do
begin
{ get a bookmark so that we can return to the same record }
SavePlace := GetBookmark;
try
{ move to prior record}
FindPrior;
{ get the value }
PrevValue := Fields[0].Value;
{Move back to the bookmark this may not be the next record anymore if something else is changing the dataset asynchronously }
GotoBookmark(SavePlace);
{ Set the value }
Fields[0].Value := PrevValue;
{ Free the bookmark }
finally
FreeBookmark(SavePlace);
end;
end;
end;
Ищи ошибки, по моему они налицо
gsu (2002-12-23 19:08:00) [11]Да брось ты эти закладки, пиши так:
var B: Integer;
...
B:=DataSet.recno;
DataSet.DisableControls;
....
....
DataSet.recno:=B;
DataSet.EnableControls
cf (2002-12-23 19:03:00) [12]Извиняюсь, я не целиком дописал вопрос.
Код выглядит так:
var B: TBookmarkStr;
...
DataSet.DisableControls;
B:=DataSet.Bookmark;
....
....
DataSet.Bookmark:=B;
DataSet.EnableControls;
т.е. позицию курсора в БД я запоминаю и затем восстанавливаю, но после EnableControls активная строка в DBGrid"e переносится в середину DBGrid"a. Именно этого эффекта хотелось бы избежать...
gsu (2002-12-23 19:01:00) [13]Да ?
А какже я уже n лет пользуюсь, ладно ща взгляну.
cf (2002-12-23 18:54:00) [14]свойство RecNo только для чтения
gsu (2002-12-23 18:48:00) [15]RecNo: integer
До:
RecNo:=Dataset.RecNo
После:
Dataset.RecNo:=RecNo