Кэш данных — это область для чтения/записи в документе Office Word или рабочей книге Excel, которую ваше приложение Office может использовать для хранения необходимых данных. Самый часто встречающийся вариант— привязка элементов управления хоста или элементов управления Windows Forms в панели действий или на поверхности документа к набору данных, сохраненному в острове данных документа.
Физически этот остров данных реализован как XML-документ, который встроен в документ Office. Этот XML-контейнер может хранить любой тип данных, который удовлетворяет следующим двум требованиям:
□ он должен быть реализован как открытое поле элемента хоста для чтения/записи (например, класс This Document для Word или класс ThisWorkbook для Excel);
□ он должен быть сериализируемым (исполняющая среда использует XmlSerializer для вербализации объекта в острове данных).
Большинство встроенных типов .NET соответствует этим требованиям. Если вы написали нестандартный тип, который также удовлетворяет этим требованиям, то он тоже может быть сохранен внутри острова данных.
Добавить данные в кэш данных просто. Вы помечаете атрибутом CachedAttribute тот тип данных, который хотите сохранить, и тогда (при условии, что тип удовлетворяет требованиям кэша данных и что вы создали экземпляр данного типа внутри вашего проекта VSTO уровня документа) он будет автоматически добавлен в остров данных.
Объекты DataSet оказываются полезными при передаче внутри острова данных. Для объявления DataSet в качестве кэшируемого необходимо написать следующее:
[Microsoft.VisualStudio.Tools.Applications.Runtime.Cached()] public DataSet poDataSet;
Это декларативная инструкция для исполняющей среды VSTO— сериализовать объект и добавить его в кэш данных текущего документа. Сам DataSet можно заполнять так, как вам угодно.
Есть также способ обязательного кэширования объекта в документе. Каждый элемент хоста предоставляет методы isCached и startCaching. Комбинируя оба этих метода, вы можете проверить, имеется ли уже объект в кэше, и если его еще нет— добавить его в кэш. При помощи этих двух методов вы можете добавить следующий код для сохранения в документе нашего объекта poDataSet:
if (!this.IsCached("poDataSet"))
{
this.StartCaching("poDataSet ");
}
Если вы используете метод StartCaching (), то нет необходимости помечать класс атрибутом Cached, но сам объект должен по-прежнему выполнять остальные требования для сериализации острова данных Office. Вы можете также использовать метод stopCaching хост-элемента для того, чтобы дать указание исполняющей среде VSTO удалить объект из кэша данных документа.
Совет
Есть еще и третий способ поместить объект в кэш данных: окно свойств. Если вы используете окно Data Sources для добавления набора данных в ваш проект, то сможете создать экземпляр набора данных, а затем выбрать его в визуальном конструкторе. В окне свойств для экземпляра набора данных установите свойство Cache in Document в значение True. Вам понадобится также изменить тип доступа экземпляра набора данных на Public.