gpt4 book ai didi

devexpress - 如何以编程方式合并 DevExpress RichEditControl 中的数据?

转载 作者:行者123 更新时间:2023-12-04 05:40:44 56 4
gpt4 key购买 nike

我想允许用户从预定义模板列表中进行选择。选择模板后,RichEditControl (REC) 会显示根据所选模板格式化的文档,其中字段已合并。 (用户永远不会看到合并文档的双括号“代码隐藏”。)我的模板作为 varbinary 在数据库中,并作为字节数组传递给 gui,剥离后的类看起来像这样:

public class Template
{
public byte[] Document {get;set;}
}

在包含 REC 的表单中,我在事件处理程序中为包含可用模板的下拉列表的更改事件调用以下方法(letterWriterEditor 是我的 REC,并且 templateBindingSource 绑定(bind)到 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;

合并字段绑定(bind)得很好:我可以使用 REC 功能区栏中的“邮件”按钮之一手动插入它们。但是当我尝试以编程方式执行时,文档最终是空白的。我希望它最终成为一个合并的字母,一旦用户选择所需的模板就可以保存。我的理解是,将 ViewMergeData 属性设置为 true,这就是应该发生的事情。

如果有人有任何想法,我将不胜感激。提前致谢。

最佳答案

我目前正在做类似的事情,在我的情况下,我将模板加载到 RichEditDocumentServer 中(类似于 RichEditControl 但没有 UI),然后设置 MailMerge 的 DataSource,之后只需调用 RichEditDocumentServer 的 MailMerge 方法并将 RichEditControl 的文档作为范围。

RichEditDocumentServer 加载模板并执行 MailMerge,然后在 Form 的 RichEditControl 中显示文档。

你可以试试这个:

在您的表单中声明一个 RichEditDocumentServer。

RichEditDocumentServer docServer;

并在您的表单构造函数或 OnLoad 中对其进行初始化。
docServer = New RichEditDocumentServer();

然后像这样改变你的方法:
public void MergeTemplateFieldsWithValues(IList<LetterWriterMergeFieldCollection> mergeValues, Template template)
{
using (Stream s = new MemoryStream(template.Document))
{
docServer.LoadDocument(s, DocumentFormat.Rtf);
}

BindingList<LetterWriterMergeFieldCollection> bindingList = new BindingList<LetterWriterMergeFieldCollection>(mergeValues);
templateBindingSource.DataSource = bindingList;
templateBindingSource.ResetBindings(false);
}

我不确定你在哪里将你的字段绑定(bind)到文档,但我认为 templateBindingSource 做到了,所以只需要设置 docServer 的 DataSource:
docServer.DataSource = templateBindingSource;

之后,只需执行 MailMerge 并使用您的表单 letterWriterEditor 显示它:
docServer.MailMerge(letterWriterEditor.Document);

它应该工作。 :)

关于devexpress - 如何以编程方式合并 DevExpress RichEditControl 中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11271316/

56 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com