ドリンクバーゲン会場

印刷データの抽出2010年10月23日 09時37分19秒

CrystalReportで印刷を行うに当たり、残る一つの問題がデータの抽出です。
現状では全件データが表示されてしまっているので、
印刷したいデータのみ抽出する必要があります。

ネットでいろいろ調べてみたのですが、やっぱりなかなか情報が見つからず、
今回もサンプルを参考にしました。

チュートリアルに「選択式を使用したフィルタ」というのがあったので、
そのサンプルを見てみました。

サンプルでは、フォーム上で抽出する情報をセットし、ボタンのクリックで
更新するようになっていたのですが、
今回私が行いたいのは、CrystalReportに直接抽出条件を引き渡す方法ですが、
このサンプルでできそうだったので、試してみます。

サンプルでは、ボタンのクリック時に処理が発生するのですが、
ConfigureCrystalReports()の中にも初期値を設定していました。
ConfigureCrystalReports()は前回データベース接続の設定を入れた場所ですので、
今回もここに設定を追加することで抽出ができると思い設定を追加しました。

******************************************************
Private Sub ConfigureCrystalReports()
  Dim reportPath As String = Server.MapPath("レポートファイル")
  CrystalReportViewer1.ReportSource = reportPath
   Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
   SetDBLogonForReport(myConnectionInfo)
  myConnectionInfo.ServerName = "サーバー名"
   myConnectionInfo.UserID = "ユーザー名"
   myConnectionInfo.Password = "パスワード"
End Sub
******************************************************

上記が前回作成したConfigureCrystalReports()サブです。
ここに抽出用の条件を追加していきます。

******************************************************
Private Sub ConfigureCrystalReports()
<==== ここから
If Not IsPostBack Then
Dim mySelectFormula As String = "{学籍情報.ID} = '学籍番号'"
CrystalReportViewer1.SelectionFormula = mySelectFormula
End If
ここまで ====>
  Dim reportPath As String = Server.MapPath("レポートファイル")
  CrystalReportViewer1.ReportSource = reportPath
   Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
   SetDBLogonForReport(myConnectionInfo)
  myConnectionInfo.ServerName = "サーバー名"
   myConnectionInfo.UserID = "ユーザー名"
   myConnectionInfo.Password = "パスワード"
End Sub
******************************************************

抽出条件を追加したのが上のソースです。
"{学籍情報.ID} = '学籍番号'"
が抽出条件になります。
'学籍番号'に抽出したい番号を登録します。
今回はテストなので、とりあえず学籍番号は直接設定して動かしてみました。
しかし、抽出されずに全件表示されているようです。

サンプルと同じようにしているのですが、抽出されないので、
なにがおかしいのかよくわかりませんでしたが、
デバッグを続けているうちに、おかしなことに気が付きました。

と言うのも、
CrystalReportViewer1.SelectionFormula = mySelectFormula
で抽出条件をセットしているのに、セットした情報が消えているのです。
ステップ実行すると、確かに最初はセットされているのですが、
そのあとのレポートファイルのセットを行うと内容がクリアされてしまうようです。

サンプルではこの順番で記述されているのですが、
消えているのが原因とすれば逆にしたら抽出条件が消えなくなるのではないかと思い、
やってみました。

******************************************************
Private Sub ConfigureCrystalReports()
<====上に移動
  Dim reportPath As String = Server.MapPath("レポートファイル")
  CrystalReportViewer1.ReportSource = reportPath
ここまで ====>
If Not IsPostBack Then
Dim mySelectFormula As String = "{学籍情報.ID} = '学籍番号'"
CrystalReportViewer1.SelectionFormula = mySelectFormula
End If

この場所から

   Dim myConnectionInfo As ConnectionInfo = New ConnectionInfo()
   SetDBLogonForReport(myConnectionInfo)
  myConnectionInfo.ServerName = "サーバー名"
   myConnectionInfo.UserID = "ユーザー名"
   myConnectionInfo.Password = "パスワード"
End Sub
******************************************************

逆にレポートファイルの設定が消えるなんてことはないかちょっと心配だったのですが、
実行してみると、今度はちゃんと抽出されていました。
ステップ単位で確認してみても抽出条件は消えずに残っていたので、
やはりレポートファイルを登録する際に、抽出条件をクリアしているようです。

まあ多少のトラブルはありましたが、これで抽出に関しても問題なさそうです。
あとは、抽出条件をどうやってCrystalReportに引き渡すかです。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://n-box.asablo.jp/blog/2010/10/23/5431879/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。