ユーザーが定義済みのテンプレートのリストから選択できるようにしたいと考えています。テンプレートが選択されると、リッチエディット コントロール (REC) は、選択されたテンプレートに従って書式設定されたドキュメントを表示し、フィールドは既に結合されています。(ユーザーはマージ ドキュメントの二重括弧の「コード ビハインド」を見ることはありません。) 私のテンプレートは varbinary としてデータベースにあり、クラスのバイト配列として gui に渡されます。クラスは次のようになります。
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 のリボン バーにある [メーリング] ボタンの 1 つを使用して手動で挿入できます。しかし、プログラムで行おうとすると、ドキュメントは空白になります。ユーザーが目的のテンプレートを選択するとすぐに、マージされたレターとして保存できるようにしたいと思います。私の理解では、ViewMergeData プロパティを true に設定すると、これが起こるはずです。
誰かに何かアイデアがあれば、私は感謝します。前もって感謝します。