【问题标题】:VSTO ColumnChanging event not fired and HasChanges not working correctly on Excel sheetVSTO ColumnChanging 事件未触发且 HasChanges 在 Excel 工作表上无法正常工作
【发布时间】:2012-06-06 13:28:45
【问题描述】:

一些背景:有一个 VSTO 插件到 Excel 用 c#,.net 4.0 编写 Excel 有许多选项卡,这些选项卡使用 DataSets 填充来自数据库的数据。当用户将数据添加到工作表时,某些列会自动设置为默认数据。我们正在使用 DataSet 的 HasChanges 方法来检查数据中是否有修改并突出显示它们。

一般来说效果很好。但是我们在其中一个用户站上有一个奇怪的问题。不会触发 ColumnChanging 事件。此外,即使添加了新数据,DataSet.HasChanges 方法也会返回 false。

该问题仅出现在安装了 Excel 2007 的 Windows 7 机器上。

我们尝试通过禁用宏在 DEV 计算机(Windows XP、Excel 2007)上重现该问题,但没有成功。我们显然不能在用户机器上安装 Visual Studio。

您对如何重现和修复它有任何想法吗?也许是配置问题?

【问题讨论】:

  • 首先是执行修改数据集的代码吗?你能分享一些代码吗?
  • @BrijeshMishra 数据集由用户在 excel 中修改。我认为这可能与某些用户配置有关-其他用户没有此问题。

标签: c# windows-7 ado.net vsto excel-2007


【解决方案1】:

客户建议:

  • 客户端上可能的安全设置。

  • 有安装程序吗?如果是这样,请尝试卸载然后重新安装。

  • 另外,从 SDK 获取调试器。根据您的构建设置、配置设置以及是否部署了 pdb,您可能能够在客户端计算机上使用。

  • 您是否修复了客户端上的 .NET 4.0?

  • 您是否修复了客户端上的 VSTO 4 运行时? VSTO 4 Run-time 也需要更新。

代码建议:

  • 事件未触发的最可能原因是对象更改并且对事件的引用丢失。确保数据集永远不会改变。

  • 确保那里的事件处理程序没有被删除。

  • 可能有错误导致数据集变量被重置和事件丢失。

  • 可能先处理然后再创建另一个实例。

【讨论】:

  • 我怀疑问题出在安全设置的某个地方,因为在其他站点上一切正常。问题仅出现在 2 台 Windows 7 机器上。我们还将检查 .NET 4.0 和 VSTO 安装。
【解决方案2】:

尝试使用Application.SheetChange,它会更可靠

UPD 当你处理包装好的 COM 对象并订阅它的事件时,你需要保留对原始对象的引用以保持它的活动状态(事件订阅是不够的)

【讨论】:

  • 感谢提示,我会检查一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2015-12-02
相关资源
最近更新 更多