お世話になります。
以下の環境で次の現場のための勉強をしています。
・VB.NET 2010
・クリスタルレポート2010
・Oracle 10g (ODP接続)
実際、表示は出来るのですが、他にスマートな方法はあるのでしょうか。
問題の箇所は「本当かこれ??」の部分です。
.Netの経験が浅く、oracleのグリットの考え方やDataSet、DataTableに疎いです。
ご教授頂ければありがたいです。
宜しくお願い致します。
DataSet1.xsd(レポートに紐付けしているデータテーブル) は以下の通りです。
DataTable1(架空の表)
・DataColumn1
・DataColumn2
・DataColumn3
・DataColumn4
ソースのURL(7日以内に削除されます。)
http://firestorage.jp/download/2dc5f34811f3225ab357b7516b9c5a9fa907652b
ソース
Dim cnn As New OracleConnection("user id=test1;password=test1;data source=XE")
Dim strSql As String = "SELECT * FROM SAMPLE1 ORDER BY ID"
Dim cmd As New OracleCommand(strSql, cnn)
Dim da As New OracleDataAdapter(cmd)
Dim Obj_CrRpt As New CrystalReport2
Dim dsTemp As New DataSet1()
Dim dt As New DataTable()
Try
'A4サイズ
Obj_CrRpt.PrintOptions.PaperSize = CrystalDecisions.Shared.PaperSize.PaperA4
'横帳票
Obj_CrRpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape
'---------------------
' ↓ 本当かこれ??
'---------------------
da.Fill(dt)
dsTemp.DataTable1.Merge(dt)
For intCount As Integer = 0 To dt.Rows.Count - 1
dsTemp.DataTable1.Rows(intCount).Item(0) = dt.Rows(intCount).Item(0)
dsTemp.DataTable1.Rows(intCount).Item(1) = dt.Rows(intCount).Item(1)
dsTemp.DataTable1.Rows(intCount).Item(2) = dt.Rows(intCount).Item(2)
Next
'---------------------
' end
'---------------------
'---------------------
' ↓ なぜできない??
'---------------------
'da.SafeMapping.Add("DataColumn1", GetType(System.String))
'da.SafeMapping.Add("DataColumn2", GetType(System.String))
'da.SafeMapping.Add("DataColumn3", GetType(System.String))
'da.SafeMapping.Add("DataColumn4", GetType(System.String))
da.SafeMapping.Add("*", GetType(System.String))
da.Fill(dsTemp, "DataTable1")
'---------------------
' end
'---------------------
Obj_CrRpt.SetDataSource(dsTemp)
CrystalReportViewer1.ReportSource = Obj_CrRpt
CrystalReportViewer1.Refresh()
Catch ex As Exception
'エラーログ
MessageBox.Show("正しい値を入力してください。", _
"エラー", _
MessageBoxButtons.OK, _
MessageBoxIcon.Error)
''Call grLib_Cls_Main.Lib_Cls_LogOutPut(grStr_ChekTrace & " OleDbDataReader", ex)
Finally
da.Dispose()
cmd.Dispose()
End Try
da.Fill(dsTemp)ではダメですか?
編集 削除>da.Fill(dsTemp)ではダメですか?
回答、ありがとうございます。
実は既にこれは実行して中身が入っていない事を確認しています。
以下の領域が確保されていないため、エラーになります。
dsTemp.DataTable1.Rows(0).Item(0)
逆に上記の場所に何らかの値が入っていればレポートには対象の値が正常に出力されます。
すみません、誤記がありました。
「以下の領域が確保されていないため、エラーになります。」
ではなく、
「エラーにはならないが値が無いので表示もされない状態」
です。
申し訳ありません。