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

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

Сохранение свойств колонок DBGrida при открытии/закрытии датасета [D6]


Страницы:   1 2

alexEagle ©   (2003-12-18 12:09:00) 

Где нужно написать свой код для сохранения свойств колонок DBGrida при открытии/закрытии датасета?


alexEagle   (2003-12-18 14:00:00) [21]

Vlad > читай внимательно задачу - " ран-тайме открываю тайбл". Какой конструктор? Да он вообще не знает не о каком датасете!


Sandman25   (2003-12-18 13:28:00) [22]

Насчет TDBGridEh - там конечно много всего, но нужного мне я не нашел.

SaveGridLayoutIni, RestoreGridLayoutIni смотрели?


MV   (2003-12-18 13:27:00) [23]

По поводу DBGridEh. Пример кода (здесь dbGrid - это как раз тот самый грид):
// Глобальная (в пределах модуля) переменная
Var
ItWasActivated : boolean;// Здесь хранится, была ли форма (фрейм) активизирована ранее
...
Var
RegIniFile : TRegIniFile;
SelfComplexName : String; // Ну, типа како-то уникальный идентификатор текущего фрейма (или формы)
...
// Активизиция формы (фрейма)
if not ItWasActivated then begin // При первой активизации пишем в реестр
RegIniFile := TRegIniFile.Create("\SOFTWARE\" // конфигурацию "по умолчанию"
+ LeftStr(ExtractFileName(Application.ExeName),
Pos(".",ExtractFileName(Application.ExeName))-1)
+"\GRIDS\DEFAULT\"+SelfComplexName, KEY_WRITE);
try
dbGrid.SaveGridLayout(RegIniFile);
finally
RegIniFile.Free;
end;
ItWasActivated := True
end;

RegIniFile := TRegIniFile.Create("\SOFTWARE\" // При любой активизации
+ LeftStr(ExtractFileName(Application.ExeName), // загружаем сохраненную
Pos(".",ExtractFileName(Application.ExeName))-1) // ранее конфигурацию
+"\GRIDS\LAST_WORKED\"+SelfComplexName, KEY_READ);

try
dbGrid.RestoreGridLayout(RegIniFile,[grpColIndexEh, grpColWidthsEh,
{ grpSortMarkerEh,} grpColVisibleEh,
grpRowHeightEh, grpDropDownRowsEh, grpDropDownWidthEh]);
finally
RegIniFile.Free;
end;

// Все. Это по поводу активизации формы (фрейма) с гридом.
// По поводу сохранения при дезактивации:

var
RegIniFile : TRegIniFile;
begin
...
RegIniFile := TRegIniFile.Create("\SOFTWARE\" // При дезактивации
+ LeftStr(ExtractFileName(Application.ExeName), // сохраняем конфигурацию
Pos(".",ExtractFileName(Application.ExeName))-1)
+"\GRIDS\LAST_WORKED\"+SelfComplexName, KEY_WRITE);

try
dbGrid.SaveGridLayout(RegIniFile)
finally
RegIniFile.Free;
end;
// И это все.
// Далее - для любителей (восстановление значений "по умолчанию"):

procedure Tfrb_GridFrame.actRestoreGridDefaultsExecute(Sender: TObject);
var
RegIniFile : TRegIniFile;
begin
inherited; // Восстановление конфигурации по умолчанию
RegIniFile := TRegIniFile.Create("\SOFTWARE\"
+ LeftStr(ExtractFileName(Application.ExeName),
Pos(".",ExtractFileName(Application.ExeName))-1)
+"\GRIDS\DEFAULT\"+SelfComplexName, KEY_READ);
try
dbGrid.RestoreGridLayout(RegIniFile,[grpColIndexEh, grpColWidthsEh,
{ grpSortMarkerEh,} grpColVisibleEh,
grpRowHeightEh, grpDropDownRowsEh, grpDropDownWidthEh]);
finally
RegIniFile.Free;
end;

end;

//////////////////
// Теперь - все.

P.S. Весь код - рабочий


Vlad   (2003-12-18 13:15:00) [24]


> alexEagle (18.12.03 13:11) [11]

Делай класс-наследник TDBGrid, где переопределяй конструктор и деструктор, и пиши туда свои процедуры сохранения/считывания


alexEagle   (2003-12-18 13:11:00) [25]

Насчет TDBGridEh - там конечно много всего, но нужного мне я не нашел.
Насчет остальных предложений - видимо я недостаточно объяснил задачу. Ситуация вот какая. Я кладу на форму три компоненты - датасурс, тейбл и грид. В ран-тайме открываю тайбл. После чего вызываю функцию считывания информации по колонкам этого грида (ширина, название, видимость) из ини-файла. При закрытии формы я делаю сохранение. Хотелось бы встроить эту функцию в сам грид, но не знаю как.
По поводу встраивания в датасет могу сказать только то, что не каждый датасет используется гридом.


Sandman25   (2003-12-18 13:05:00) [26]

[9] Vlad © (18.12.03 13:02)

Согласен :)


Vlad   (2003-12-18 13:02:00) [27]


> отображается ли данный DataSet каким-нибудь DBGrid.

Ну насколько я понял из постов автора речь идет как раз о конкретном гриде. А если грид известен, то узнать, подключен к нему данный датасет или не подключен проблем не составит :)


MV   (2003-12-18 12:58:00) [28]

Юзай TDBGridEh - он халявный, умеет то, что ты хочешь, и еще оооо-чень многое другое


Sandman25   (2003-12-18 12:52:00) [29]

[6] Vlad © (18.12.03 12:50)

Он имеет ввиду, что неизвестно, отображается ли данный DataSet каким-нибудь DBGrid. Соответственно при открытии DataSet не получается найти и считать DBGrid, который его показывает.


Vlad   (2003-12-18 12:50:00) [30]

Ты сам себе противоречишь:

> для сохранения свойств колонок DBGrida при открытии/закрытии
> датасета?


и


> Датасет вообще не причем

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


> откуда мне знать он используется с гридом или без!

DBGrid.DataSource.DataSet - отсюда и узнать.


Sandman25   (2003-12-18 12:42:00) [31]

[4] alexEagle (18.12.03 12:35)

1) Если Вы делаете поля в Design-time, при выходе из программы грид себя запишет. При следующем запуске при создании грид считает эти старые параметры - пользователю очень удобно.
2) Если Вы делаете поля в run-time, то сразу после создания полей считываете сохраненные параметры. В остальном аналогично 1.
3) Если у Вас нет явных (persistent) полей, то нужно их сделать.


alexEagle   (2003-12-18 12:35:00) [32]

при создании грида датасет ещё не открыт, при уничтожении он может быть уже закрыт!
Если я поменял ширину колонки - делфи это не сохранить нигде - я должен сделать это сам.
Датасет вообще не причем - откуда мне знать он используется с гридом или без!


Sandman25   (2003-12-18 12:15:00) [33]

alexEagle (18.12.03 12:09)

Лучше делать это при создании/уничтожении грида.


stone   (2003-12-18 12:13:00) [34]

Dataset.AfterOpen/Dataset.BeforeClose


Johnmen   (2003-12-18 12:13:00) [35]

Ничего не нужно писать. Если, конечно, свойства сам прописывал...


Страницы:   1 2

Наверх

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