Событие VSTO ColumnChanging не сработало, и HasChanges не работает правильно на листе Excel - PullRequest
1 голос
/ 15 февраля 2012

Немного предыстории: есть плагин VSTO для Excel, написанный на c #, .net 4.0 В Excel много вкладок, которые заполняются данными из базы данных с использованием DataSets. Когда пользователи добавляют данные на лист, для некоторых столбцов автоматически устанавливаются данные по умолчанию. Мы используем методы DataCet HasChanges, чтобы проверить, были ли изменения в данных, и выделить их.

Обычно это работает довольно хорошо. Но у нас странная проблема на одном из пользователей станции. Событие ColumnChanging не вызывается. Кроме того, метод DataSet.HasChanges возвращает значение false, даже если добавлены новые данные.

Проблема возникает только на компьютере с Windows 7 с установленным Excel 2007.

Мы попытались воспроизвести проблему на устройствах DEV (Windows XP, Excel 2007), отключив макросы, но безуспешно. Мы не можем установить Visual Studio на компьютере пользователя, очевидно.

У вас есть идеи, как воспроизвести и исправить это? Может быть, это проблема конфигурации?

Ответы [ 2 ]

1 голос
/ 06 июня 2012

Предложения клиентов:

  • Возможные настройки безопасности на клиенте.

  • Есть ли установщик? Если это так, попробуйте удалить, а затем переустановить.

  • Также получите отладчик из SDK. Вы можете использовать его на клиентском компьютере в зависимости от настроек сборки, настроек конфигурации и от того, развернули ли вы pdb.

  • Вы исправили .NET 4.0 на клиенте?

  • Вы восстановили VSTO 4 Run-time на клиенте? Также требуется обновление до VSTO 4. Run-time.

Рекомендации по коду:

  • Наиболее вероятная причина того, что событие не запускается, - это изменение объекта и потеря ссылки на событие. Убедитесь, что набор данных никогда не меняется.

  • Убедитесь, что обработчики событий не удалены.

  • Возможно, произошла ошибка, приводящая к сбросу переменной набора данных и потере события.

  • Возможно удаление и создание другого экземпляра.

1 голос
/ 04 июня 2012

Попробуйте использовать Application.SheetChange, он может быть более надежным.

UPD, когда вы имеете дело с обернутым COM-объектом и подписываетесь на его событие, вам нужно сохранить ссылку на оригинальный объект, чтобы сохранить его живым (подписки на события недостаточно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...