Я хочу разрешить пользователям выбирать из списка предопределенных шаблонов. Когда шаблон выбран, RichEditControl (REC) отображает документ, отформатированный в соответствии с выбранным шаблоном, с уже объединенными полями. (Пользователь никогда не видит двойную скобку «код программной части» документа слияния.) Мои шаблоны находятся в базе данных как varbinary и передаются графическому интерфейсу в виде массивов байтов в классе, который, урезанный, выглядит следующим образом:
public class Template
{
public byte[] Document {get;set;}
}
В форме, содержащей REC, я вызываю следующий метод в обработчике событий для измененного события раскрывающегося списка, содержащего доступные шаблоны (letterWriterEditor — это мой REC, а templateBindingSource привязан к LetterWriterMergeFieldCollection, класс, содержащий строковые свойства, представляющие поля, которые я хотел бы иметь возможность объединить в документе, а также их значения для этой конкретной буквы (определенные в другом месте программы)):
public void MergeTemplateFieldsWithValues(IList<LetterWriterMergeFieldCollection> mergeValues, Template template)
{
using (Stream s = new MemoryStream(template.Document))
{
letterWriterEditor.LoadDocument(s, DocumentFormat.Rtf);
}
BindingList<LetterWriterMergeFieldCollection> bindingList = new BindingList<LetterWriterMergeFieldCollection>(mergeValues);
templateBindingSource.DataSource = bindingList;
templateBindingSource.ResetBindings(false);
}
У меня есть следующий оператор в конструкторе этой формы:
letterWriterEditor.Options.MailMerge.ViewMergedData = true;
Поля слияния связаны нормально: я могу вставить их вручную, используя одну из кнопок «Рассылки» на ленточной панели REC. Но документ оказывается пустым, когда я пытаюсь сделать это программно. Я бы хотел, чтобы это закончилось как объединенное письмо, готовое к сохранению, как только пользователь выберет нужный шаблон. Насколько я понимаю, если для свойства ViewMergeData установлено значение true, это должно происходить.
Если у кого есть идеи, буду признателен. Заранее спасибо.