Добрый день.
В 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>