![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сохранение свойств колонок DBGrida при открытии/закрытии датасета [D6]
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]
Ничего не нужно писать. Если, конечно, свойства сам прописывал...