学生の活動の性質上、私はしばしばさまざまな研究室および学期論文を書かなければなりません。 これらの作業に不可欠な部分(ビジネスプログラミングタスクの80%など)は、データベース内で見つかった要素に関するレポートをコンパイルするためのコード、または長く複雑な操作のためのコードです。 .NET Framework内のデスクトッププログラミングでは、このような問題を解決するさまざまな方法があります。
- 古い学校: RTF形式をキャンセルした人はいませんでしたが、私は個人的に、色とリンクの異なるフォントを使用してカラーテキストよりも難しいものを作成することはできませんでした。 この方法は効果的ですが、標準は最も簡単に理解できるものではなく、 最新バージョンを見るのも怖いです
- Silverlight / WPFの場合- 独自のFlowDocument形成。 オブジェクトモデルは、古い形式を手動で作成するよりも間違いなく便利ですが、オプションは太字の場合のみです
- Crystal Reportsなどのサードパーティソリューションは 、おそらくレポートを作成するための非常に強力なツールですが、これは常に必要なわけではありません。 さらに 、いくつかの追加ソフトウェア製品をプルすることも常に可能とは限りません1
- Microsoft Office Interopを使用します 。 いいえ、これはm笑です。 制御された環境でのメモリを使用した手動作業は、喜びの嵐のみを引き起こします 。 初心者プログラマーは、この仕事の原則を受け入れる前に、複数のコーヒーのパッケージを飲みます。
- HTMLの形成。 喜ばしいことに、この標準では、思いつくことができるCSSを使用して、中程度のフォーマットのドキュメントを作成できます。 短所-すべての要件を満たすドキュメントを作成することは非常に困難です。 しかし、これは必要がある場合です。 長所:標準のシンプルさと「クラウドとブラウザへの」普遍的な移行は、HTMLの開発を刺激します。
後者について話します。
最も簡単で明白なオプションは、HTML文字列を手動で生成することです。 プラットフォームに精通している人はすぐにStringオブジェクトの連結を開始し、ドキュメントを読む人は
StringBuilderクラスに注意を払います。 いずれにしても、String.Formatは常にレポートを生成する最も便利な方法ではありません。 しかし、ASP.NET MVCを使用するプラットフォームの同僚は、
Razorプレゼンテーションエンジンを十分に活用できません。 ここで疑問が生じます。ASP.NETRazorのパワーを自分の目的に使用してみませんか?
まず、
System.Web.Razorアセンブリを接続する必要があります。 ASP.NET MVCによって提供されるため、ターゲットコンピューターにインストールされていない場合は、必要なdllのローカルコピーを処理する必要があります。
ビューを継承する基本クラスを宣言します。
public abstract class TemplateBase { public StringBuilder Buffer { get; set; } public StringWriter Writer { get; set; } public TemplateBase() { Buffer = new StringBuilder(); Writer = new StringWriter(Buffer); } public abstract void Execute();
まず、エンジンを初期化する必要があります。
private RazorTemplateEngine SetupRazorEngine() {
ご存知のように、.NETはコードのオンザフライでのコンパイルをサポートしています。 この機能は、Razorによって使用されます。 したがって、この場合、テンプレートを使用してファイルを読み取り、別のアセンブリに保存する必要があります。
すべてがうまくいけば、使い方は簡単です:
Assembly asm = Assembly.LoadFrom(outputAssemblyName); if (asm == null) { MessageBox.Show(" "); } else { Type typ = asm.GetType("RazorOutput.Template"); if (typ == null) { MessageBox.Show(" RazorOutput.Template {0}", asm.FullName); } else { TemplateBase newTemplate = Activator.CreateInstance(typ) as TemplateBase; if (newTemplate == null) { MessageBox.Show(" RazorOutput.Template TemplateBase"); } else {
それだけです。 残っているのは、TemplateBaseを介して、またはフォームのRazor構文を介して、プレゼンテーションデータを指定する方法の問題です。
@functions { public string CustomerName { get; set; } public string ResetLink { get; set; } }
後者の場合、テンプレートの動的生成を放棄する必要がありますが、このデータにアクセスするのは非常に簡単です。
そのため、単純な動きの助けを借りて、MSの強力で便利なツールを使用して、「別の」テンプレートエンジンを記述する誘惑を回避しました。
1 .NET Frameworkで記述しているため、クライアントにインストールされていると想定されています。 しかし、Office、Crystal Reports、SQL Server、Visual Studio-必ずしもではありません