Вот как я это сделал. Класс MyMap содержит пары значений. Они должны быть свойствами, потому что DatGridView не работает с полями. MyMapCollection содержит коллекцию MyMaps в виде BindingList (позволяет добавлять строки в DataGridView). Этот класс необходим, чтобы сделать редактор настроек Visual Studio счастливым, он не может работать с простым BindingList. Итак:
public class MyMap {
public String FirstField { get; set; }
public String SecondField { get; set; }
}
public class MyMapCollection : BindingList<MyMap>
{
public MyMapCollection Clone()
{
MyMapCollection result = new MyMapCollection();
foreach (MyMap map in this)
result.Add(new MyMap() {
FirstField = map.FirstField, SecondField = map.SecondField });
return result;
}
}
Функция Clone создает глубокую копию объекта, так что данные не изменяются непосредственно на объекте в Settings.Default, но когда пользователи так говорят. В редакторе настроек вы бы добавили элемент типа MyMapCollection с именем say TheValues и очень просто использовали его в коде:
myDataGridView.DataSource = Settings.Default.TheValues.Clone();
Если данные необходимо изменить обратно на настройки (когда пользователь нажимает кнопку ОК), измените настройки соответствующим образом:
Settings.Default.TheValues = (MyMapCollection)myDataGridView.DataSource;
Использование DataTable или DataSet вместо MyMapCollection также возможно, но это решение позволяет мне использовать TheValues в остальной части кода, который даже слаще, чем DataSet, возможно, был.