代码之家  ›  专栏  ›  技术社区  ›  Dialecticus

使用DataGridView进行本地设置

  •  1
  • Dialecticus  · 技术社区  · 14 年前

    我需要一种简单的方法来持久化和编辑应用程序中的一组字符串对。我相信具有两个顶点的DataGridView可以帮助我查看和编辑,我希望使用应用程序设置而不是数据库来存储数据(可能使用数据集作为设置类型)。我就是不能把这些都放在一起。有办法吗?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Dialecticus    14 年前

    我就是这样做的。类mymap保存值对。它们必须是属性,因为datgridview不适用于字段。MyMapCollection将MyMaps集合保存为bindingList(允许在DataGridView中添加行)。该类是使Visual Studio设置编辑器满意所必需的,无法使它与普通的绑定列表一起工作。所以:

    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创建对象的深度副本,这样在设置中不会直接更改对象上的数据。默认设置,但当用户这样说时。在设置编辑器中,您将添加一个名为say thevalues的mymapcollection类型的项,并在代码中使用非常简单的项:

    myDataGridView.DataSource = Settings.Default.TheValues.Clone();
    

    如果应将数据更改回设置(当用户单击“确定”时),则相应地更改设置:

    Settings.Default.TheValues = (MyMapCollection)myDataGridView.DataSource;
    

    使用DataTable或DataSet而不是MyMapCollection也是可能的,但此解决方案允许我使用其余代码中的值,这甚至比DataSet可能更甜。

        2
  •  0
  •   Nilesh Gule    14 年前

    如果试图编辑的值是普通的键值对,则可以创建一个将这些值作为属性的类,并将该类对象序列化为XML文件。可以反序列化类并将值赋给DataGridView。

    您还可以创建自定义配置并将其与app.config/web.config文件分开存储。这将类似于nhibernate或spring.net配置文件存储时在configSections键中引用它们。

    下面是如何创建自己的自定义配置的链接。 MSDN link