はじめに:
この記事は、一昨日、Kanyuanzi によって提供されたリンクです。誰のものかは忘れましたが、アドレスhttp://www.codeproject.com/aspnet/ReportViewer.asp が投稿されたことだけを覚えています。と言うのは、何らかの理由で翻訳されていないからです。後で調べてみると、それがたまたま役に立ちました。社内の誰かが RS に取り組んでおり、階下のオプトエレクトロニクス部門でも BS のニーズをよく抱えていたからです。私はこのことについてはずっと前から知っていましたが、知らなかったのです。それを勉強する時間があったので、たまたまこの記事を見つけました。それで、午後中ずっとそれを注意深く勉強し、最初に翻訳してからいくつかの洞察を追加しました。
翻訳プロセス中、私は可能な限りローカライズするよう努めましたが、元の著者の意味は保持しました。翻訳に不正確な点があれば、批判して修正してください。
インターネット上には SqlServer RS のサービス モード (サーバー モード) がたくさんありますが、特にパラメータ呼び出しがある場合のローカル モード (ローカル モード) については、本当に長い時間をかけて勉強しました。
サーバー モードの代わりにローカル モードが使用される理由は、サービス モードのクライアントがレポートを要求するたびに、サーバーがデータをレポートに編成してクライアントに送信する必要があるためです。これは安全ですが、巨大なレポートは危険になります。サーバーからブラウザへの送信は処理されないため、パフォーマンスが低下します。
この記事では、ASP.NET2.0 の ReportViewer コントロールを使用してレポートを整理し、読み取る方法について説明します。ここでは、ローカル モードを選択し、パラメーターを指定したストアド プロシージャを使用します。私が使用しているのは、ASP.NET2.0、VisualStudio2005、SQLServer2005とApplication Blockです。 Microsoft Application Block ツールをお持ちでない場合は、例の SQL ヘルパーを介してストアド プロシージャを呼び出すコードを SQL コマンドに置き換えてください。
ここでは、Northwind データベースを選択します。この例では、ユーザーがドロップダウン リストから製品名を選択し、レポート内の情報をフィルターで除外することを示しています。
最初のステップは、パラメータ
AS
SELECT Categories.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Categories INNER JOIN Products ON
Categories.CategoryID = Products
を使用してストアド プロシージャALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
を作成することです。.CategoryID
WHERE CategoryName=@CategoryName
RETURN
2 番目のステップは、DataSet デザイナーを使用して、DataSet の下に DataTable を作成することです。
ソリューション マネージャー インターフェイスで、App_Code ファイルを右クリックし、[新しい項目の追加] を選択します。ポップアップ ダイアログ ボックスで [DataSet] を選択し、DataSetProducts.xsd などの名前を付けて、[追加] ボタンをクリックします。このとき、TableAdapter 構成ツールが自動的に表示されます。表示されない場合、または誤って閉じた場合は、DataSet デザイナーの任意の場所を右クリックし、[追加] を選択して、[TableAdapter] を選択すると、ツールが再度表示されます。ウィザードに従ってDataTableを作成し、表示されるインターフェースでコマンドの種類として「ユーザー既存ストアドプロシージャ」を選択し、選択コマンドとして「ShowProductByCategory」を指定します。
最初のステップで作成されたストアド プロシージャは、2 番目のステップでは DataTable になり、レポート データはこの DataTable を通じて提供されます。
図 1: DataTable を含む DataSetProducts.xsd がレポートのデータ ソースです
ステップ 3: レポート ファイルを作成します。
ソリューション マネージャーを右クリックして、[新しい項目の追加] を選択し、[レポート テンプレート] を選択します。この例では、デフォルト名 Report.rdlc が直接使用されます。 RDL はレポート定義言語を意味し、c はクライアントを意味します。つまり、rdl はサーバー レポート、rdlc はローカル レポートです。
ツールボックスからテーブルをレポート デザイン フォームにドラッグします。この「テーブル」には、ヘッダー、コンテンツ、末尾の 3 つの部分があります。テーブルはデータを表示する領域であり、領域はバインドされている DataSet の下のデータ要素を表示します。レポートには多くの領域を含めることができますが、各領域に表示できるのは 1 つの DataSet の内容のみです。これに基づいて、ストアド プロシージャを使用して複数のテーブルのデータを DataSet に結合し、レポートにデータを入力できます。
図 2: レポート テンプレート専用のツールバーのコントロール
「Web サイト データ ソース」ウィンドウを開き、2 番目の手順で作成した「DataSetProducts」データ セットを見つけます。 「ShowProductByCategory」という DataTable が表示されるまで展開します。このテーブルは、TableAdapter 構成ウィザードで [既存のストアド プロシージャを使用する] を選択しており、ストアド プロシージャの名前が ShowProductByCategory であるため、この名前が付けられています。
Web サイトのデータ ソース ウィンドウで、ProductName、UnitPrice、および UnitsInStock をレポート デザイナーの詳細を表示する行、つまり中央の行の 1 列目、2 列目、および 3 列目にドラッグします。また、表示詳細行の任意のフィールドを右クリックし、プロパティ バーの [形式] タブを見つけて、単価と在庫単位の表示形式を定義できます。
図 3. Web サイトのデータ ソース フォームには、プログラムで定義された DataSet とその列が表示されます。
ステップ 4: ReportViewer コントロールを ASP.NET2.0 ページに追加します
。まず、DropDownList コントロールをフォームにドラッグし、データ ソース オプションを選択して、カテゴリの CategoryName フィールドをバインドします。他のシナリオでは、ユーザーはテキスト ボックスなどの他の方法でパラメータを入力し、ストアド プロシージャに渡すことができます。
次に、レポート ビュー コントロールをフォームにドラッグし、その Visible プロパティを False に設定します。もう 1 つ注意すべき点は、ASP.NET 2.0 のレポート ビューアーには Excel および PDF のエクスポート メソッドが用意されているということです。ただし、実際のプロセスでは、印刷されたレポートとそのデザイン方法の間には常にわずかな差異が生じることがわかりました。
図 4、このページをスタートアップ ページに設定する
次に、レポート ビューアーのスマート タグを呼び出し、作成した Report.rdlc ファイルを選択します。
図 5: レポート定義ファイルを Report Viewer コントロールに結合します。
手順 5: ユーザーがドロップダウン ボックスで別の名前を選択し、レポートに別のデータを表示できるようにコードを作成します。Microsoft.Reporting.WebForms
名前空間を分離コード (またはコード ファイル) に追加することを忘れないでください
。ファイル。
1
システムを使用します。
2System.Data を使用します。
3System.Data.SqlClient を使用します。
4System.Configuration を使用します。
5System.Collections を使用します。
6System.Web を使用します。
7System.Web.Security を使用します。
8System.Web.UI を使用します。
9System.Web.UI.WebControls を使用します。
10System.Web.UI.WebControls.WebParts を使用します。
11System.Web.UI.HtmlControls を使用します。
12Microsoft.ApplicationBlocks.Data を使用します。
13Microsoft.Reporting.WebForms を使用します。
14
15パブリック部分クラス ReportViewerLocalMode : System.Web.UI.Page
16{
17 パブリック文字列 thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*次のステートメントを使用して、複数のステートメントがあるかどうかを示します。
22 個の入力パラメータ、数値を使用してパラメータを宣言
アプリケーション内の 23 個のパラメーター (例: New SqlParameter[4])
24
25 public SqlParameter[] SearchValue = new SqlParameter[1];
26
27 protected void RunReportButton_Click(オブジェクト送信者、EventArgs e)
28 {
29 //ReportViewer1.Visible はデザイン モードでは false に設定されます
30 ReportViewer1.Visible = true;
31 SqlConnection thisConnection = new SqlConnection(thisConnectionString);
32 System.Data.DataSet thisDataSet = new System.Data.DataSet();
33 SearchValue[0] = new SqlParameter("@カテゴリ名",
34 DropDownList1.SelectedValue);
35
36 /**//* ストアド プロシージャの結果をデータセットに配置します */
37 thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
38 "ShowProductByCategory"、SearchValue);
39
40 /**//*または thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "ShowProductByCategory"、dropdownlist1.selectedvalue);
入力パラメータが 1 つだけの場合は 42 */
43
44 /**//* thisDataSet を関連付けます (保存されているデータセットが読み込まれます)
45 プロシージャの結果) ReportViewer データソースを使用 */
46 ReportDataSource データソース = 新規
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(データソース);
52 if (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "申し訳ありませんが、このカテゴリには製品がありません!";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59}
ステップ 6: レポートを実行するには、
F5 キーを押し、「レポートの実行」ボタンをクリックしてレポートを実行します。
図 6、実行レポート
最後に、ReportViewer が Web サイトに導入されていることを確認し、web.config ファイルを次の形式で構成します。
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=?? ??????????" validate="false" /> ReportViewer コントロールを含む Web サイト プロジェクトを別のサーバーに展開する場合は、ファイル C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe をコピーして、それを実行する必要があります。ターゲットサーバー。 翻訳経験:これは私がこれまでに行った翻訳の中で最も単純な翻訳であるように思えますが、著者が比較的簡潔で明確であると述べたためかもしれません。 学習経験: 著者は、ReportViewer で受け入れられる 2 つのレポート方法について詳しく説明し、簡単な分析を行いました。ただし、実際のプロジェクトでは、サーバー モードを使用する人が多く、大きすぎず、複雑すぎないレポートを作成できる場合もあります。 社内にRS専門の人がいるのですが、文章の質にもよりますが、30分を超えると1週間かかるそうです。アルゴリズムの変更を検討する必要があるかもしれません。怖そうですが(笑)、階下の太陽光発電部門のレポート作成ニーズに使用できるのであれば、以前の GridView から Excel への方法よりも快適になりたいと思っています。 これが調査されて理解できれば、より多くの人がこの制御を理解できるように、特別な紹介ビデオの説明を作成する予定です。