Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо