一些背景知识:有一个用c#,。net 4.0编写的Excel VSTO插件 Excel有许多选项卡,使用DataSet从数据库填充数据。当用户向工作表添加数据时,某些列会自动使用默认数据进行设置。我们使用DataSet的HasChanges方法来检查数据是否有修改并突出显示它们。
一般情况下效果很好。但是我们在一个用户站上有一个奇怪的问题。 ColumnChanging事件未触发。此外,即使添加了新数据,DataSet.HasChanges方法也会返回false。
问题仅发生在安装了Excel 2007的Windows 7计算机上。
我们尝试通过禁用宏来重现DEV计算机(Windows XP,Excel 2007)上的问题,但没有成功。我们无法在用户机器上安装Visual Studio。
您对如何重现和修复它有什么想法吗?也许这是配置问题?
答案 0 :(得分:1)
尝试使用Application.SheetChange,它可以更可靠
UPD当你处理被包装的COM对象并订阅它的一个事件时,你需要保持对原始对象的引用以使它保持活动状态(事件订阅是不够的)
答案 1 :(得分:1)
客户建议:
客户端上可能的安全设置。
有安装人员吗?如果是这样,请尝试卸载然后重新安装。
此外,从SDK获取调试器。您可以在客户端计算机上使用,具体取决于您的构建设置,配置设置以及部署pdb。
您是否在客户端修复了.NET 4.0?
您是否在客户端修复了VSTO 4运行时?此外还有VSTO 4运行时所需的更新。
代码建议:
事件未触发的最可能原因是对象更改并且对事件的引用将丢失。确保数据集永远不会改变。
确保尚未删除事件处理程序。
可能存在导致数据集变量重置且事件丢失的错误。
可能的处理然后创建另一个实例。