【发布时间】:2019-05-19 20:05:27
【问题描述】:
我正在开发一个 .net 4.6.1 C# winforms 项目,该项目有一个 datagridview,用户可以在其中更改列的顺序。
我想将新顺序存储在 db 表中,但无法找到正确的事件来检测用户何时更改了列的顺序。
在这里搜索后,我被指向DataGridView.ColumnDisplayIndexChanged事件in this thread。但是那个并不能解决我的问题。 (它只在填充数据网格视图时提供了多个事件的解决方案,但通过在设置数据源后添加处理程序很容易回答)
这种方法有效,但是当用户更改列的顺序时会被触发多次(看起来就像将 A、B、C、D 列更改为 D、A、B、C 时事件被触发 3 次(可能是 A,B,D,C - A,D,B,C - D,A,B,C)
我很难找出如何检测事件是否是最后一个(因为我不想存储所有这些新订单,只存储最后一个)
我的问题是:
对于我的案例来说,此事件是“最佳”事件吗?
如果是,如何检测最终的 ColumnDisplayIndexChanged 事件(D、A、B、C)?
【问题讨论】:
-
您可以使用
Form.Closing,这样您只需提交一次更改,而不是每次用户更改排序时。 -
感谢@Sinatr 的建议。我已经考虑过了。但这仍然需要大量数据,因为用户会经常关闭表单(并且大多数表单都有多个数据网格)
-
是的,你的问题是保存不知道何时保存。我无法提出答案,因为它已关闭,但我可以为您指出正确的方法。尝试使用去抖动器并将超时设置为您需要的值。因此,当事件发生变化时,根据您可以接受的情况,让操作说 5 秒或 1 秒。因此,对同一事物的连续更改将停止为最终更改。如果一次更改调用该事件 5 次。 debouncer 只会调用最后一个,所以你只保存一次。去抖功能可以在这里找到
-
谢谢@npo,我想我通过更改它重新打开了这个问题(因为我认为它不是重复的)
标签: c# .net winforms datagridview