2011-08-03 19 views
0

printdocumentメソッドで文字列を印刷するのに問題があります。連結された文字列を印刷する

私は文字列の形式で無効なエントリのレポートを持っています。私は無効なエントリのforloopの中にエントリを連結してこの文字列を構築します。この

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

は、今私はprintdocumenトン方法(それはシングルトンだ)から、この文字列にアクセスするように見えます。問題は、文字列には約300項目があり、1ページに収まらないということです。

最初の30レコードが印刷されているとします。私はe.HasMorePages = trueコマンドで問題があると私は理解しているので、rpintdocument1メソッドを再実行します。そうであれば、メソッドは上から下へレポートストリングを印刷し、30番目のレコードで停止します。

printSocumentメソッドが次に実行されるときに、reportSummary文字列から印刷したばかりの行を削除する方法はありますか?文字列の同じ内容(最初の30レコード)は印刷されません。

+3

質問に答えることはできませんが、文字列 –

+2

...またはString.Joinを連結する代わりに、実際には 'StringBuilder'を使用してください。 –

+0

stringbuilderの別の投票。 Excel VBAで十分に作業してください。そして、あなたは本当にそれがどれほど偉大であるかを理解するようになります。 – aevanko

答えて

0

から開始すると、あなたprintdocument方法は、あなたがこれまでに印刷するために管理してきたどのように多くのレコードを格納するために住んでいるクラスのフィールドを使用している:

EDIT:状況に合わせてサンプルコードを更新しました

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つの文字列を連結しないで、代わりにエラーのリストを印刷メソッドに渡し、次に印刷ページメソッドが呼び出されたときに印刷する必要がある最初のレコードのインデックスを保持します。あなたは何ができるか、あなたの最後の印刷のポイント(1)

+0

これは本当に私がここで言うことができない理由のオプションではありません...それは論理的なオプションですが、私は単にそれが印刷されている既存の方法を変更することはできません – Joe

+0

あなたはどのように知っていますか?特定のページに印刷されましたか?または、印刷のために文字列全体を送信しているだけですか(たとえば、DrawText(string、rect)) – Jaime

関連する問題