私はc#でアプリケーションを作成しましたが、図に示すようにその内容を請求書の形式で印刷したいと思います。顧客データを1回だけ印刷したいのですが、データグリッドビューに表示された彼の車で実行するように要求されたジョブはそこにあるはずです。請求書の最後に労働力と総労働力を含むリストの形式。一部の人々は、私がそれらを使用したことがないクリスタルレポートを使用することを提案したので、それを短くするより簡単な解決策を探して、フォームから必要な値を印刷するにはどうすればよいですか?
3 に答える
最も簡単で迅速な解決策は、Visual Basic PowerPackのPrintFormコントロールを使用することです(C#プロジェクトでも使用できます)。
http://msdn.microsoft.com/en-us/vbasic/bb735936.aspx
コントロールをフォームにドラッグしてから、コード呼び出しからドラッグするだけです
printForm1.Print();
これにより、フォームにあるものはすべて印刷されるので、フォームにレポートをデザインし、そのコードを呼び出すだけで完了です。
前回C#フォームからいくつかのフィールドを印刷する必要があったときは、「Bitmap」オブジェクトと「Graphics」オブジェクトを使用してビットマップイメージを作成し、「PrintDocument」を使用して印刷しました。
印刷されるレポートのレイアウトは、印刷される要素の座標を指定することによってコードで行われます。安くて汚いですが、動作します。
ローカルSSRSレポート(.rdlc拡張子)を使用できます。レポートを作成するための「レポート」の下に新しいアイテムテンプレートがあるはずです。レポートは、レポートビューアコントロールを使用してWinformsに表示されます(このコントロールは、WindowsFormsHostを使用するWPFアプリケーションでも使用できます)。唯一の欠点は、アプリケーションとともにインストールする必要がある必須の依存関係です。 これは、2010年のレポートビューア用の再配布可能なパッケージです。
プラスは、レポートをブラウザから表示する必要がある場合に、SSRSインスタンスで簡単にホストできることです。ビューアは、SSRSインスタンスでホストされているレポートをローカルにレンダリングすることもできます。
レポートの作成に使用するデータソースに応じて、レポートビューアを使用するためのガイドがオンラインにたくさんあります。次の例では、データソースとしてジェネリックリストを使用しています。新しいReportDataSource行の「ラベル」は、レポート定義のデータセットの名前と同じである必要があります。汎用オブジェクトのプロパティも、データセットの列名と一致する必要があります。
public ReportViewer(IEnumerable<UnprocessedLabel> labels)
{
InitializeComponent();
var reportViewer = new Microsoft.Reporting.WinForms.ReportViewer { ProcessingMode = ProcessingMode.Local };
reportViewer.LocalReport.ReportPath = System.IO.Path.GetDirectoryName(Application.ResourceAssembly.Location) + "\\UnprocessedPalletLabel.rdlc";
var ds = new ReportDataSource("labels", labels);
reportViewer.LocalReport.DataSources.Add(ds);
reportViewer.RefreshReport();
}