【问题标题】:Properties.Settings.Save() only saves on first callProperties.Settings.Save() 仅在第一次调用时保存
【发布时间】:2011-01-20 18:00:24
【问题描述】:

我有一个DataGridView 填充有BindingList。此列表将保存到设置文件中。它可以正确保存和加载.. 但只会在我第一次调用Properties.Settings.Save() 时保存。之后,调用Save() 将无济于事。

我已经验证Save() 正在被调用,并且在它被调用时BindingList 包含正确的数据。无论我是否在列表中添加、删除或编辑元素,它只会在第一次调用时保存到 user.config。之后,甚至没有打开 user.config 进行编辑。

有人知道为什么会这样吗?

【问题讨论】:

  • Properties.Settings.Whatever 中的值是否与后续保存时的 BindingList 同步?
  • @Austin:是的,BindingList 本身是我的Settings 类的属性,在调试模式下检查列表,它的值是正确的;但是,在第一次调用 Save() 时,这些值实际上并没有保存到 user.config
  • 您可能需要发布一些代码以获得更好的答案。

标签: c# .net datagridview persistence settings


【解决方案1】:

对 Save 的调用将表示用户属性的类的 IsDirty 属性设置为 false。在将用户属性保存到磁盘之前测试此属性。

如果需要多次调用 Save,请将 IsDirty 属性设置为 true:

Properties.Settings.Default.PropertyValues["property name"].IsDirty = true;

【讨论】:

  • 不,那还是不行。还有其他想法吗?
  • 它现在肯定会在每次调用时写入文件,但它似乎仍然只写入在第一次调用 Save() 时有效的信息。我是否需要以某种方式将BindingList 中的各个项目标记为脏? (BindingList 本身就是属性)
  • 我在DataGridViewCellEndEdit 事件上调用Save(),这样当我完成编辑单元格时,它会保存。如果我要向 DataGridView(绑定到 Settings.Default.MyBindingList)添加三个项目,调试会确认 BindingList 包含所有三个新值。 Settings.Default.Save() 被调用了 3 次,并且所有 3 次,它打开 user.config 并写入它。但是,这三次它只会写入仅添加第一项的列表。
【解决方案2】:

我偶然发现了一个解决方案,虽然我不知道它为什么有效。

似乎在调用Save() 之前调用Settings.Default.MyBindingList.ResetBindings()Settings.Default.MyBindingList.ResetItem(1)传递给ResetItem() 的号码并不重要)解决问题。

BindingList 不得将其值标记为已更改,即使列表中的项目正确实现 INotifyPropertyChanged

值得注意的是,调用Settings.Default.MachineList.Machines.EndNew(1) 也可以解决问题(!?!)。来自documentation

EndNew 方法提交通过AddNew 方法添加的待处理新项目。 如果没有新项目等待提交,则此方法不执行任何操作。

任何人都可以对此有所了解吗?我做错了什么,还是DataGridViewBindingList(或者Settings 提供程序)中的错误?

【讨论】:

    猜你喜欢
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多