我正在创建一个Windows窗体应用程序,它从几个xml文件中读取一堆标签,并以win形式将数据写入DataGridview。目前,数据显示在DataGrid上,但如果我更改任何xml文件,则不会更新dataGridView中的数据。要求是如果在xml文件中进行了任何更改,则数据必须在dataGridView中自动更改而无需任何手动干预。我尝试在线搜索但找不到解决此问题的任何答案
如果有人解决了这个问题,请告诉我。
答案 0 :(得分:0)
字典不是绑定的理想选择 - Dictionary's
ValueCollection<T>
不支持IList,因此它不是BindingSource的非常好的匹配。如果你坚持使用词典,那么总是权威的Marc Gravell有一个可能适合你的解决方案here。
如果您不必使用字典,那么典型的,有点天真的方法是将BindingSource.DataSource
设置为List<MyObject>
,然后将DataGridView.DataSource
设置为该BindingSource。设置完成后,不是通过底层列表添加/删除项目,而是通过BindingSource的添加/删除方法添加/删除它们 - 用户界面将获取这些更改。如果您更改现有项目,则可以调用BindingSource.ResetItem
方法通知UI它需要刷新该项目。
但最好,最灵活的方法是将DataGridView.DataSource
属性设置为BindingList<MyObject>
,理想情况下,让MyObject类实现INotifyPropertyChanged
... BindingList会通知新项目的UI和INotifyPropertyChanged实现通知UI有关现有项目的更改。这使您可以直接修改集合,而无需担心保持UI同步。