【发布时间】:2010-08-27 23:23:51
【问题描述】:
我需要简单的方法来在我的应用程序中保存和编辑一组字符串对。我相信具有两个 culmns 的 DataGridView 可以帮助我查看和编辑,我希望使用应用程序设置而不是数据库来存储数据(可能是 DataSet 作为设置类型)。我就是不能把所有这些放在一起。有什么办法吗?
【问题讨论】:
标签: c# datagridview settings
我需要简单的方法来在我的应用程序中保存和编辑一组字符串对。我相信具有两个 culmns 的 DataGridView 可以帮助我查看和编辑,我希望使用应用程序设置而不是数据库来存储数据(可能是 DataSet 作为设置类型)。我就是不能把所有这些放在一起。有什么办法吗?
【问题讨论】:
标签: c# datagridview settings
这就是我的做法。 MyMap 类保存值对。它们必须是属性,因为 DatGridView 不适用于字段。 MyMapCollection 将 MyMap 的集合保存为 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;
}
}
Function Clone 创建对象的深层副本,这样数据不会直接在 Settings.Default 中的对象上更改,而是在用户说的时候更改。在设置编辑器中,您将添加一个 MyMapCollection 类型的项目,称为 TheValues,并在代码中非常简单地使用它:
myDataGridView.DataSource = Settings.Default.TheValues.Clone();
如果应将数据更改回设置(当用户单击确定时),则相应地更改设置:
Settings.Default.TheValues = (MyMapCollection)myDataGridView.DataSource;
使用 DataTable 或 DataSet 代替 MyMapCollection 也是可能的,但这个解决方案允许我在其余代码中使用 TheValues,这比 DataSet 本来的更好。
【讨论】:
如果您尝试编辑的值是普通键值对,您可以创建一个将这些值作为属性保存的类,并将该类对象序列化到 XML 文件中。您可以反序列化该类并将值分配给 DataGridView。
您还可以创建自定义配置并将其与 App.config / Web.config 文件分开存储。这将类似于 NHibernate 或 spring.Net 配置文件存储在 configsections 键中的引用。
这是一个如何创建您自己的自定义配置的链接。 MSDN link
【讨论】: