"EhLib.Com" https://forum.ehlib.com/ru/ |
|
Сохранение\восстановление параметров сетки https://forum.ehlib.com/ru/viewtopic.php?f=9&t=2738 |
Страница 1 из 1 |
Автор: | ООО ЛОГОСКОР [ 13 фев 2019, 12:42 ] |
Заголовок сообщения: | Сохранение\восстановление параметров сетки |
Здравствуйте. Начали пробовать работать в VS. Собственно в VCL были удобные методы сохранявшие параметры сетки в реестр SaveColumnsLayout и RestoreColumnsLayout. Но в WinForms что-то таких методов нет. Можно как-то проделать эту операцию? Спасибо |
Автор: | EhLibSupport [ 15 фев 2019, 11:56 ] |
Заголовок сообщения: | Re: Сохранение\восстановление параметров сетки |
Добрый день. В WinForms подобный механизм имеется и работает следующим образом. Для записи настроек используется метод DataGridEh.GetStorableSettings Код: public virtual Dictionary<string, object> GetStorableSettings() который возвращается коллекцию настроек (Список колонок с сохраненными значениями свойств Width, DisplayIndex, Visible) Затем разработчик дописывает код в программе который переписывает коллекцию в хранилище данных. Обычно для записи коллекции используют сериализацую в текстовое представление в виде форматированного текста. Например, с помощью класса JavaScriptSerializer коллекцию можно записать в виде JSON строки. Полученную строку можно запись в текстовое хранилище данных. При загрузке настроек грида используется метод DataGridEh.ReadStorableSettings Код: public virtual void ReadStorableSettings(Dictionary<string, object> settings) Коллекция settings должны быть создана и считана заранее из хранилища настроек. Обычно настройки считывают из текстового файла. Если настройка была сохранена в виде JSON строки, то из нее можно получить объект Dictionary<string, object> с помощью метода Код: JavaScriptSerializer.Deserialize<Dictionary<string, object>>(JSONString) Использование хранилища в виде коллекции Dictionary<string, object> дает возможно создавать вложенные коллекции любого уровня глубины. После создания коллекции самого верхнего уровня, ее сериализуют в строку и записывают в хранилище. Код: var mainLevelSettings = new Dictionary<string, object>(); // Положение размер формы mainLevelSettings.Add("Location", Location); mainLevelSettings.Add("Size", Size); //Настройки гридов формы mainLevelSettings.Add("dataGrid1", dataGrid1.GetStorableSettings()); mainLevelSettings.Add("dataGrid2", dataGrid2.GetStorableSettings()); При сериализации все вложенные коллекции автоматически запишутся в строку в виде вложенного участка форматированной строки. Пример использования данной технологии смотрите в демо проекте Demos\EhLibDemos.sln Поставьте точки останова на методах private void MainForm_Load(object sender, EventArgs e) private void MainForm_FormClosed(object sender, FormClosedEventArgs e) чтобы посмотреть, как происходит чтение и запись настроек форм и контролов в/из хранилища настроек. Настройки записываются в файл MainDemo\bin\Debug\MainDemo.exe.dsk Код: <?xml version="1.0" encoding="utf-8"?>
<Settings> <FrameMainGrid>{"Controls":{"dataGrid1":{"MultiTitleItems":{"colOrdedId":{"Visible":true,"Width":52,"Index":0},"superTitleEmployee":{"Visible":true,"Index":1,"Items":{"colEmpId":{"Visible":true,"Width":50,"Index":0},"colComboBoxEmpName":{"Visible":true,"Width":138,"Index":1}}},"dataGridSuperTitle1":{"Visible":true,"Index":2,"Items":{"colCustId":{"Visible":true,"Width":50,"Index":0},"dataGridComboBoxColumn1":{"Visible":true,"Width":117,"Index":1}}},"colShipFee":{"Visible":true,"Width":99,"Index":3},"dataGridSuperTitle2":{"Visible":true,"Index":4,"Items":{"colOrdDate":{"Visible":true,"Width":124,"Index":0},"colShipDate":{"Visible":true,"Width":114,"Index":1}}},"colShipperId":{"Visible":true,"Width":51,"Index":5},"colShipName":{"Visible":true,"Width":150,"Index":6}}}}}</FrameMainGrid> <MainFormSettings>{"LanguageId":null,"Location":{"IsEmpty":false,"X":518,"Y":216},"Size":{"IsEmpty":false,"Width":1138,"Height":745}}</MainFormSettings> </Settings> |
Автор: | ООО ЛОГОСКОР [ 18 фев 2019, 09:04 ] |
Заголовок сообщения: | Re: Сохранение\восстановление параметров сетки |
Спасибо. В VCL все было проще. Нужно было просто вызвать соответствующую функцию. На самом деле пока ждал ответа, я все эти танцы с сериализацией уже станцевал. Ведь все эти нюансы можно было спрятать внуnри компонента, как было в VCL. |
Страница 1 из 1 | Часовой пояс: UTC |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |