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

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

Помогите с DBGrid! [D5, Paradox]


Страницы:   1 2 3

alexander_ua ©   (2003-01-17 15:22:00) 

В гриде помещаются не все поля. При использовании прокрутки (горизонтальной) после переоткрытия Query (close-open) полосы прокрутки возвращаются в прежнее положение. Т.е. например у меня есть 10 полей, в видимой области грида - поля 1-6. Делаю прокрутку, чтобы видеть поля 4-9. После переоткрытия датасета снова вижу поля 1-6, а нужно ведь 4-9!!!
Извиняюсь за настырность, вопрос уже задавал, но так и не получил вразумительного ответа.


AM   (2003-01-17 17:23:00) [41]

Надо завести какой-нибудь TStringList, очистить его перед тем как сделать обновление, спровоцировать, чтобы возникла перерисовка всех видимых колонок, а потом добавлять в массив имена колонок которые были перерисованы, предварительно проверить, есть ли уже в нем такое поле:
Procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
strL: TStringList;

....

strL.Add(Column.FieldName);

после этого проверить, каких полей нет в strL - те и не видемы.


alexander_ua   (2003-01-17 17:10:00) [42]

А как поймать это событие и правильно его обработать?
>Я думаю, что в данном случаи, если пользоваться стандатным >ДБГридом, то надо играть на собитии
>Procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const >Rect: TRect; DataCol: Integer; Column: TColumn; State: >TGridDrawState);

Delirium^.Tremens Сорри, но не понял намек...


Delirium^.Tremens   (2003-01-17 17:05:00) [43]

alexander_ua (17.01.03 17:01)

> Пробовал. Но после вертикального скрула опять все плохо
> - первым видимым поле становится 1, а не 4...

Так я же тебе на это и намекал :-)


AM   (2003-01-17 17:02:00) [44]

Я думаю, что в данном случаи, если пользоваться стандатным ДБГридом, то надо играть на собитии
Procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);

с помощью него получать список полей, которые отображаются в данный момент.
Я так понимаю, что оно возникает только для тех колонок, которые отображаются в данный момент на экране... или нет?


alexander_ua   (2003-01-17 17:01:00) [45]

Пробовал. Но после вертикального скрула опять все плохо - первым видимым поле становится 1, а не 4...


Delirium^.Tremens   (2003-01-17 16:42:00) [46]

А ты не пробовал выставить первым полем (напрмер 4), а потом сделать вертикальный Scroll? Что будет?


alexander_ua   (2003-01-17 16:38:00) [47]

к сожалению тоже не то, потому что я могу вообще не делать клик по какому либо полю, соответственно опять будут нулевыми указанные параметры. Мне бы знать с какого столбца (поля) начинается диапазон полей, показываемых в видимой части грида (например в текущий момент отображаются поля 3-7 (из моих десяти), вот мне и нужно знать, что первое отображаемое поле - 3, а потом суметь к нему переместиться).
Извиняюсь за настырность, но это действительно важная проблема.


Delirium^.Tremens   (2003-01-17 16:28:00) [48]

Отключить RowSelect перед закрытием, запомнить индекс, закрыть, открыть, установить в поле, включить RowSelect.


alexander_ua   (2003-01-17 16:25:00) [49]

С полями SelectedIndex и SelectedFields беда. Во-первых потому, что у меня свойство dgrowselect=True у грида, т.е. выделяю не отдельные ячейки а целые записи, а указанным полям нужен именно onclick по соответствующем поле. Также не подходит потому, что мне нужно знать не какое поле выделено, а какое находилось на первом месте до переоткрытия dataset. Надеюсь, изложил понятно...
Помогите, пожалуйста!


Delirium^.Tremens   (2003-01-17 16:24:00) [50]

Это потому, возможно, что у грида в опциях dgRowSelect


alexander_ua   (2003-01-17 16:16:00) [51]

У меня поле SelectedIndex почему-то всегда равно нулю...


MsGuns   (2003-01-17 16:15:00) [52]

Пардон, невнимательно прочитал.
Тогда >Reindeer Moss Eater (17.01.03 15:52) или SelectedFields того же грида


MsGuns   (2003-01-17 16:15:00) [53]

Пардон, невнимательно прочитал.
Тогда >Reindeer Moss Eater (17.01.03 15:52) или SelectedField того же грида


Reindeer Moss Eater   (2003-01-17 15:52:00) [54]

Перед закрытием датасета запоминай SelectedIndex у грида
После открытия датасета восстанавливай SelectedIndex.


alexander_ua   (2003-01-17 15:44:00) [55]

СТОП!!! Я не о вертикальном, а о горизонтальном перемещении!!!


MsGuns   (2003-01-17 15:37:00) [56]

Нормальная реакция Датасета на переоткрытие. Чтобы встать туда, где стоял, используй Locate или FindFirst


Страницы:   1 2 3

Наверх

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