2011-08-03 194 views
0

我用printdocument方法打印字符串时遇到了很多麻烦。打印拼接字符串

我有一个字符串形式的无效条目报告。我通过在无效条目的forloop内连接条目来构建该字符串。它看起来像这样

foreach(Error entry in ErrorEntries) 
    reportString += entry.ToString(); 

现在我访问来自printdocumen吨方法(这是一个单身)此字符串。麻烦的是,该字符串有大约300个条目,因此不适合一个页面。

比方说,它打印的前30条记录。根据我的理解,我遇到e.HasMorePages = true命令的问题,它重新运行rpintdocument1方法。如果是这样的话,那么该方法将只是从上到下打印报告字符串,再次停止在第30条记录。

有没有办法从reportSummary字符串中删除刚刚打印的行,以便下次printdocument方法运行时,它不打印字符串的相同内容(开始30条记录)?

+3

不回答这个问题,但是您应该使用'StringBuilder'来连接字符串 –

+2

...或String.Join。 –

+0

对stringbuilder的另一投票。使用Excel VBA足够长的时间,你会真正明白(缺乏)它有多伟大。 – aevanko

回答

0

你可以做的是使用类中的一个字段,你printdocument方法生活来存储你多少记录设法到目前为止打印:

编辑:更新示例代码以匹配您的情况

class YourClass { 
    private int charactersPrinted = 0; 

    ... 

    private void printdocument(object sender, PrintPageEventArgs ev) { 
    var charactersDoneThisPage = 
     this.PrintReportStringPart(reportString.Substring(charactersPrinted)); 

    charactersPrinted += charactersDoneThisPage; // Number of characters you managed to print this page 

    if (charactersPrinted < reportString.Length) { 
     ev.HasMorePages = true; 
    } else { 
     ev.HasMorePages = false; 
    } 
    } 

    // Prints the string to the page 
    // Returns the number of characters it was actually able to print 
    private int PrintReportStringPart(string reportStringPart) { 

    // Print the reportStringPart however you're already doing it 
    // filling the page 
    return charactersDoneThisPage; 
    } 
} 
0

如何不不连接单个字符串,而是将错误列表传递给您的打印方法,并保留您需要打印的第一条记录的索引......下次打印页面方法被调用时,你从点开始在您最后一次印刷(+1)

+0

这不是一个真正的选择,因为我不能说这里的原因...这是我同意的逻辑选项,但我根本无法改变它现有的打印方式 – Joe

+0

你怎么知道的(你知道吗?)字符串中有多少条记录被打印在一个给定的页面?或者你只是发送整个字符串进行打印(例如DrawText(string,rect)) – Jaime