@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

crystal report による出力について

1
投稿者投稿内容
satoshi
会議室デビュー日: 2003/03/10
投稿数: 4
投稿日時: 2003-03-20 19:21
初投稿です。よろしくお願いします。

ASP.NET(言語はVB.NET)、Crystal Report9 でクリスタルレポートに帳票の印刷を任せようとしているのですが、「年月」によって表示する内容が変わるWebフォームにおいて、ユーザが指定したWebフォーム上の「年月」の帳票を作るといった、ユーザの操作で表示する内容を変更させる必要があるのです。

今試している方法はCrystal Report の選択エキスパートを使って、パラメータフィールドで指定した離散値と等しい値という条件で抽出して表示させようとしています。
そこで、パラメータフィールドで指定する離散値にユーザが指定する「年月」をいれるような記述をしたいのです。

 ヘルプを見てParameterDiscreteValue クラスというところで離散値を追加する例が書いてあるのですが、それをそのまま貼っても、ParameterValuesやParameterDiscreteValueといったところが型の定義がされていないといわれてしまいます。
何か最初に宣言する必要があるのでしょうか?

また、パラメータ以外でも他に同様のユーザの操作(但し、クリスタルレポート上ではなくフォーム上での操作)で帳票の表示内容を変更させる方法をご存知でしたらぜび教えていただければと思います。



-Helpより----------------------------------------------------------------
ParameterDiscreteValue

[Visual Basic]
Public Class ParameterDiscreteValue
Inherits ParameterValue

次の例は、ParameterValues コレクションに離散値を追加する方法を示しています。この関数は、離散値、および ParameterValues コレクションをとります。そして、追加された新しい値を含む ParameterValues コレクションを返します。

[Visual Basic]
Private Function AddDiscreteValue(ByVal paramValue As String, _ ByVal paramValues As ParameterValues) As ParameterValues

Dim paramDiscreteValue As New ParameterDiscreteValue()
' パラメータに離散値を設定します。
paramDiscreteValue.Value = paramValue

paramValues.Add(paramDiscreteValue)
AddDiscreteValue = paramValues

End Function
KATSU
常連さん
会議室デビュー日: 2003/02/13
投稿数: 33
お住まい・勤務地: 静岡県
投稿日時: 2003-03-25 00:12
KATSU System Designの鈴木です。

引用:

 ヘルプを見てParameterDiscreteValue クラスというところで離散値を追加する例が書いてあるのですが、それをそのまま貼っても、ParameterValuesやParameterDiscreteValueといったところが型の定義がされていないといわれてしまいます。
何か最初に宣言する必要があるのでしょうか?


CrystalDecisions.Shared
をimport(?)してありますか?
(C# で言うところのusing)

CrystalDecisions.Shared.ParameterDiscreteValue
CrystalDecisions.Shared.ParameterValue



引用:

また、パラメータ以外でも他に同様のユーザの操作(但し、クリスタルレポート上ではなくフォーム上での操作)で帳票の表示内容を変更させる方法をご存知でしたらぜび教えていただければと思います。


dataSetを生成して、SetDataSourceでdataSetを渡すとか
satoshi
会議室デビュー日: 2003/03/10
投稿数: 4
投稿日時: 2003-03-26 01:26
返答ありがとうございます。

CrystalDecisions.Sharedは参照設定に追加されているようです。

DataSetを作成して渡す方法はDataSet上ではちゃんと年月でソートされていることをDataGridで確認した上で、それをCrystalReportに渡してCrystalReportViewerで表示すると年月のソートが無効となりすべてデータが表示されてしまっています。
KATSU
常連さん
会議室デビュー日: 2003/02/13
投稿数: 33
お住まい・勤務地: 静岡県
投稿日時: 2003-03-26 09:25
KATSU System Designの鈴木です。

引用:

CrystalDecisions.Sharedは参照設定に追加されているようです。


(VB.NET使いではないのでちょっと自信ないですが...)
Importsステートメントを陽に記述したらどうでしょうか?
Imports CrystalDecisions.Shared

引用:

DataSetを作成して渡す方法はDataSet上ではちゃんと年月でソートされていることをDataGridで確認した上で、それをCrystalReportに渡してCrystalReportViewerで表示すると年月のソートが無効となりすべてデータが表示されてしまっています。


すみません。内容を汲み取ることができませんでした。

dataSetを生成する際に、条件による抽出(where)、並び替え(order by)が済んでいれば
そのまま問題なく渡せると思うのですが・・・

CrystalReport側で並び替えが再度行われているとかなんてことありませんか?

[ メッセージ編集済み 編集者: KATSU 編集日時 2003-03-26 09:26 ]
satoshi
会議室デビュー日: 2003/03/10
投稿数: 4
投稿日時: 2003-03-30 06:54
再びおせわになります。

インポートの記述をしてみました所、定義されていないというエラーはでなくなりました。
思ったようなところまではまだ行ってませんが…

やはりCrystalReport側で並び替えなおされているようです。
これがどこで設定されているかわかればなんとかなりそうなのですが…
さらに調べてみます。
satoshi
会議室デビュー日: 2003/03/10
投稿数: 4
投稿日時: 2003-04-15 22:29
自己レスです。
CrystalReportを並びかえられる問題は無事クリアできました。

しかし肝心の印刷の段階に進むとPrintToPrinterのところで何故か
「ログオンに失敗しました。」とエラーがでてしまいます。
一度上の行でCrystalReportを呼び出しているのですが…
どこに原因があるのがわかりません。
ご存知でしたらどなたかアドバイスをお願いします。

--------------------------------------------------------------

Dim monthdata As New String(TargetTime)
Report.SetDataSource(objDataSet)

' パラメータをビューア コントロールに渡すために必要な変数を宣言します。
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim discreteVal As New ParameterDiscreteValue()

' パラメータは、複数の値を持つ離散型のパラメータです。

' パラメータ フィールドの名前を設定します。この名前は
'レポートのパラメータと一致している必要があります。
paramField.ParameterFieldName = "確定年月"

' 最初の離散値を設定し、パラメータに渡します。
'discreteVal.Value = "2003/02"
discreteVal.Value = monthdata
paramField.CurrentValues.Add(discreteVal)

' パラメータ フィールドのコレクションにパラメータを追加します。
paramFields.Add(paramField)

' パラメータ フィールドのコレクションをビューア コントロールに設定します。
CrystalReportViewer.ParameterFieldInfo = paramFields
CrystalReportViewer.ReportSource = Report
CrystalReportViewer.LogOnInfo.Item("tablename").ConnectionInfo.ServerName = "name"
CrystalReportViewer.LogOnInfo.Item("tablename").ConnectionInfo.Password = "pass"
CrystalReportViewer.ParameterFieldInfo.Item(0).ParameterFieldName = Report.Parameter_ParameterSelect.ParameterFieldName
'表示するレポートをリフレッシュします。
CrystalReportViewer.RefreshReport()

' プリンタを選択します。
Report.PrintOptions.PrinterName = printerName

' レポートを印刷します。startPageN および endPageN
' パラメータを 0 に設定し、すべてのページを印刷します。
Report.PrintToPrinter(1, False, 0, 0)
KATSU
常連さん
会議室デビュー日: 2003/02/13
投稿数: 33
お住まい・勤務地: 静岡県
投稿日時: 2003-04-16 00:58
KATSU System Designの鈴木です。

引用:

しかし肝心の印刷の段階に進むとPrintToPrinterのところで何故か
「ログオンに失敗しました。」とエラーがでてしまいます。
一度上の行でCrystalReportを呼び出しているのですが…
どこに原因があるのがわかりません。
ご存知でしたらどなたかアドバイスをお願いします。



利用しているデータベースと接続方法が不明なので断言できませんが、

---過去ログ---
投稿者 KOUさんの
件名:CrystalReportViewerの使い方
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=1572&forum=7&start=0
のスレッドが参考になるのではないかと思います。(たぶん・・・)

引用:

7.場合によっては、データソース元のデータベースに接続する必要があります。
CrystalReportViewer1.LogOnInfo.Item("テーブル名").ConnectionInfo.Password = "データベース接続用パスワード"
など、パスワードを明示的にコード内に書く必要があったりするようです。


のあたりとか。

※追記です。
もしかして、上記のスレッドはもう参照されていられるのかな?

(ごめんなさい)C#のコーディングですが、
--------------------------------------------------------
crDatabase = rpt1.Database;
crTables = crDatabase.Tables;
crConnectionInfo = new ConnectionInfo();
crConnectionInfo.ServerName ="";
crConnectionInfo.DatabaseName = "";
crConnectionInfo.UserID = "User";
crConnectionInfo.Password = "Pwd";

foreach (CrystalDecisions.CrystalReports.Engine.Table aTable in crTables)
{
crTableLogOnInfo = aTable.LogOnInfo;
crTableLogOnInfo.ConnectionInfo = crConnectionInfo;
aTable.ApplyLogOnInfo(crTableLogOnInfo);
}
--------------------------------------------------------
こんな感じでやってます。

データベースによっては
crConnectionInfo.ServerName ="";
crConnectionInfo.DatabaseName = "";
なんてあたりがミソだったり、

すべてのテーブルにログイン情報が必要だったりします。


[ メッセージ編集済み 編集者: KATSU 編集日時 2003-04-16 01:28 ]
1

スキルアップ/キャリアアップ(JOB@IT)