【发布时间】:2021-11-02 02:14:51
【问题描述】:
我目前正在构建一个应用程序,在该应用程序上我有 5 个 DataGridViews,它们都显示来自 BindingList 的相同信息。
DataGridView 1 是一个管理网格,我可以在其中修改列表中的数据。 DataGridView 2 到 5 本质上是只读网格,我不需要修改任何数据,但在每个 DataGridView 中,我需要能够选择不同的行,以显示一些状态信息。
我尝试将所有 DataGridViews 链接到同一个 BindingList,但是我遇到的问题是,当我在 DGV1 中选择一行时,它也会在其他 DGV 上突出显示它,这是我不想要的。
然后我将每个单独的 DGV 链接到一个单独的新 BindingList,并将原始列表作为内容。
grdAdmin.DataSource = new BindingList<myClass>(selectedList);
grd1.DataSource = new BindingList<myClass>(selectedList);
grd2.DataSource = new BindingList<myClass>(selectedList);
grd3.DataSource = new BindingList<myClass>(selectedList);
grd4.DataSource = new BindingList<myClass>(selectedList);
这解决了能够在每个 DGV 上选择不同行的问题,但是当我在 Administration-DGV 中修改列表时,更新不会自动推送到其他 DGV,这是合乎逻辑的,因为它们是单独的实例。 为了解决这个问题,我可以将原始列表重新链接到所有单个实例,但随后它会丢失 DGV 中的选择,因此不再向我显示正确的状态。
我可以通过首先检查 DGV 并记住每个 DGV 中选定的行并在刷新绑定列表时重新选择它来解决这个问题,但这很麻烦。
所以我想知道正确的方法是什么? 在理想情况下,我有一个列表:
- 正在从管理员 DGV 修改
- 自动更新所有其他 DGV,无需重新链接
- 允许我在每个 DGV 中选择单独的行
我期待您的想法。 谢谢
*** 更新 *** 我只是注意到其他 DGV 实际上会更新,除非我刷新它们才显示。所以我将其用作临时解决方案,但我仍然很想知道我是否仍然可以改进它,或者这样做的“正确”方法是什么。
【问题讨论】:
-
“更新不会自动推送到其他 DGV”到底是什么意思?您是指在 selectedList 中添加/删除的项目,还是更改列表中项目的属性值?
-
我的意思是当我在 Admin-DGV 中更新一个值时,在其他 DGV 中该值不会被更新。直到我发现我需要刷新 DGV。
-
那么您是否要更改
myClass实例的属性值? myClass 是否实现INotifyPropertyChanged? -
恐怕没有
-
如果没有在 myClass 中实现 INotifyPropertyChanged 接口,其他 BindingList 实例不可能引发事件,因此只需在 myClass 中实现该接口即可。
标签: c# datagridview binding