Components for Delphi and C++ Builder.

Перейти в английский форум
Перейти на EhLib.com
Текущее время: 27 апр 2024, 17:02

Часовой пояс: UTC




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
СообщениеДобавлено: 21 янв 2022, 21:51 
Не в сети

Зарегистрирован: 17 окт 2016, 13:19
Сообщений: 50
Откуда: Россия, Москва
Здравствуйте, товарищи разработчики.

Что имеется: Windows 8-10, Delphi XE5, EhLib 10.0.038 без исходников.
Проект прилагается.

Тестовый проект: MemTableEh, создается динамически при старте, 3 поля + добавляются 3 записи. Сетка TDBGridEh.
При старте, проверка на существование файла с настройками сетки.
Если нет, то ничего не грузится. если есть то настойки колонок загружаются через метод сетки
Код:
DBGridEh1.Columns.LoadFromFile('полный путь к файлу настроек');



При старте программы файла настроек еще нет и соответственно в заголовках колонок стоят имена полей из MemTableEh.
Вложение:
image1.jpg
image1.jpg [ 29.4 KiB | Просмотров: 994 ]



Далее кликаем слева на нужную строку в ListBox-e (выбираем колонку), а в TEdit пишем нужное нам название, изменяем ширину любой колонки и нажимаем ниже кнопку "Применить".
В коде происходит следующее:

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGridEh1.Columns[ListBox1.ItemIndex].Title.Caption :=  edNameTitle.Text; //  меняем текст в заголовке
  ListBox1.Items.Strings[ListBox1.ItemIndex]  :=  edNameTitle.Text;         //  меняем текст в ListBox-e

  //  сохраняем настройки в файл
  try
    DBGridEh1.Columns.SaveToFile(SetGrid);
  except
  on E: exception do
    Application.MessageBox(PChar('Ошибка загрузки настроек: ' +#13+ E.Message), '!!!', mb_IConStop);
  end;
end;


После этого в папке с проектом появляется файл с настройками сетки.
Потом закрываем программу и снова запускаем. Т.к. файл уже есть, то настройки колонок загружаем из него:

Код:
//  если файл существует, то загружаем настройки из него
  if FileExists('полный путь к файлу настроек') then
    DBGridEh1.Columns.LoadFromFile('полный путь к файлу настроек');


Что мы видим - названия колонок не сохранились, но сохранились размеры...
Если открыть файл в текстовом редакторе, то мы не увидим строк Title.Caption
Если не закрывать программу и произвести такие же действия(изменения названия колонок), то названия будут сохранены, т.к. файл настроек уже существует.
Если теперь открыть файл в текстовом редакторе, то Title.Caption уже появились.
Т.е. при отсутствие файла с настройками - названия не сохраняются, при существовании файла - все нормально перезаписывается и загружается при старте.

Посмотрите, пожалуйста, в чем может быть проблема.
Заранее благодарен.


Вложения:
Test1.zip [57.35 KiB]
Скачиваний: 84
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 янв 2022, 08:06 
Не в сети

Зарегистрирован: 17 окт 2016, 13:19
Сообщений: 50
Откуда: Россия, Москва
Уважаемые разработчики, что можете сказать по данному вопросу?


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 26 янв 2022, 09:59 
Не в сети

Зарегистрирован: 21 дек 2011, 18:48
Сообщений: 1549
Добрый день.

1.
Метод DBGridEh1.Columns.SaveToFile использует правила сохранения данных с учетом правил сохранения свойств компонент в dfm файле.
Т.е. если свойство не было присвоено, то его значение не сохраняется.

2.
Вы используете динамические колонки грида. Т.е. грид сам создает колонки на основе полей ДатаСета.
В этом режиме присвоение DBGridEh1.Columns[ListBox1.ItemIndex].Title.Caption присваивает значение не внутреннему свойству Caption, а свойству Field.DisplayLabel.
И следовательно свойство Caption остается в статусе “Не менялся”, и сохраняться не будет.

Чтобы ваш код сохранения заработал, создавайте статические колонки в гриде.
Например с помощью кода - DBGridEh1.Columns.RebuildColumns;

Код:
procedure TForm1.FormShow(Sender: TObject);
  var i, iCount : integer;
begin
  DBGridEh1.Columns.RebuildColumns;

  edNameTitle.Clear;
...
end;

_________________
Best regards
EhLib support Team


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 27 янв 2022, 08:43 
Не в сети

Зарегистрирован: 17 окт 2016, 13:19
Сообщений: 50
Откуда: Россия, Москва
Спасибо! Все получилось!


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB