2012-06-30 246 views
2

我想讓用戶從預定義的模板列表中進行選擇。選擇模板後,RichEditControl(REC)將顯示根據所選模板格式化的文檔,其中已經合併了字段。 (用戶從來不會看到合併文檔的雙括號「代碼隱藏」。)我的模板以varbinary形式存在數據庫中,並作爲類中的字節數組傳遞給gui,拆分後的形式如下所示:如何以編程方式合併DevExpress RichEditControl中的數據?

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; 

字段綁定精細合併:我可以用在拍攝的功能條的郵件按鈕之一,手動插入。但是當我嘗試以編程的方式完成這個文檔時,這個文檔就變成了空白。當用戶選擇所需的模板時,我希望它最終成爲一個合併的信件,隨時可以保存。我的理解是,將ViewMergeData屬性設置爲true,這就是應該發生的事情。

如果有人有任何想法,我會很感激。提前致謝。

+0

@Kuffs我使用的代碼是以上 - 我的問題中的第二個代碼塊。我期待看到將我的模板(由Template.Document提供)與由LetterWriterMergeFieldCollection類提供的數據合併的結果。 – RobC

回答

3

我目前正在做類似的事情,在我的情況下,我加載RichEditDocumentServer(這就像一個RichEditControl,但沒有用戶界面)模板,然後設置MailMerge的數據源,之後,只需調用RichEditDocumentServer的MailMerge方法,並給RichEditControl的文檔作爲參數。

RichEditDocumentServer加載模板,然後MailMerge會在窗體的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); 
} 

我不知道你在哪裏綁定你的字段的文檔,但我認爲templateBindingSource這樣行只需要設置的DataSource docServer:

docServer.DataSource = templateBindingSource; 

後,只是做郵件合併,並使用您的形式letterWriterEditor顯示它:

docServer.MailMerge(letterWriterEditor.Document); 

它應該工作。 :)

相關問題