在日华人IT论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 988|回复: 0

水晶报表动态改变组group的key

[复制链接]
发表于 2012-6-4 09:43:28 | 显示全部楼层 |阅读模式
クリスタルレポート 動的にグループ化のキーを変更する方法
動的にグループ化の制御をする方法を示します。今回はデータベースにSQL ServerのサンプルとしてついてくるAdventureWorksを使用します。
SQL文は自作のものを使います。自作のSQL文を使うときのやり方は次のページに書いてあります。
最初レポートは、年月を表したYandMというフィールドでグループ化されています。そして、下記のサンプルプログラムで動的にグループ化を顧客番号でのものに変更します。
レポート自体は作成時にフォーマットが決まっているので、この機能の使い道としては、グループ化を変更することによって切り口を変えてみたい時に使うとよいのではないでしょうか。同じデータを見るために2つ別々にレポートを作るのも面倒ですので。
  1. SELECT [SalesOrderID]
  2. ,[OrderDate]
  3. ,[CustomerID]
  4. ,CONVERT(VARCHAR,YEAR([OrderDate])) + '/' + CONVERT(VARCHAR,MONTH([OrderDate])) AS [YandM]
  5. FROM [AdventureWorks].[Sales].[SalesOrderHeader] AS [SalesOrderHeader]
复制代码
  1. using CrystalDecisions.CrystalReports.Engine;
  2. //レポート用変数の作成
  3. ReportDocument myDocument = new ReportDocument();
  4. this.openFileDialog1.InitialDirectory = Application.ExecutablePath;
  5. if (openFileDialog1.ShowDialog() == DialogResult.OK)
  6. {
  7. //レポートをメモリにロード
  8. myDocument.Load(this.openFileDialog1.FileName);

  9. if (MessageBox.Show("顧客番号でグループ化しますか?", "確認", MessageBoxButtons.YesNo) == DialogResult.Yes)
  10. {
  11. //新たにグループ化する為のキーとなるフィールドを取得する。
  12. //今回は自身で作成したSQL文を使用したため、テーブル名が全角の「コマンド」となっている。
  13. //自作の時は必ずこうしないといけないようだ。
  14. DatabaseFieldDefinition myField = myDocument.Database.Tables["コマンド"].Fields["CustomerID"];
  15. //グループ化のコレクションでループする
  16. foreach (Group myGroup in myDocument.DataDefinition.Groups)
  17. {
  18. //グループ化のフィールド名が「YandM」であるかどうか。
  19. if (myGroup.ConditionField.Name == "YandM")
  20. {
  21. //グループ化を「CustomerID」で行うように設定
  22. myGroup.ConditionField = myField;
  23. }
  24. }
  25. }

  26. this.crystalReportViewer1.ReportSource = myDocument;
  27. }
  28. }
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|在日华人IT论坛

GMT+8, 2024-11-21 21:26 , Processed in 0.035385 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表