CrystalReportsのSetDataSourceを利用するには?

解決


ニャン犬  2008-07-14 14:52:54  No: 144936  IP: 192.*.*.*

開発環境
・Vista Business
・VS2005ProEd(ASP.NET)
・Oracle11g
・CrystalReports for VS2005

お世話になっております。
まだまだ駆け出しのプログラマー、ニャン犬と申します。

現在、帳票出力系の開発に携わっています。
とりあえず単純にDBからひっぱってきたDataTableをSetDataSourceで設定して
Viewerに渡して表示させようとしています。

以下ソースになってます。

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared

Protected Sub btn_test_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btn_test.Click

 Dim dsitem As New DSDataSetTableAdapters.ITEMTableAdapter
 Dim dtitem As New DSDataSet.ITEMDataTable
 Dim crd As ReportDocument
 Dim reportpath As String
 Dim key1 As String

 key1 = "00001"
 dtitem = dsitem.GetDataBytest(key1)
 If dtitem.Rows.Count = 0 Then Exit Sub

 reportpath = Server.MapPath(".") & "\Report\testCR.rpt"
 crd = New ReportDocument
 crd.Load(reportpath)
 crd.SetDataSource(tbitemflow)   <-エラー1
 CrystalReportViewer1.ReportSource = crd

 dtitem.dispose()
 daitem.dispose()

End Sub

上記ソースのエラー1となっている箇所が波線で表示されそのエラー内容は
-これらの引数に最も固有な、アクセス可能な 'SetDataSource' がないため、オーバーロードの解決に失敗しました
-'Public Overridable Sub SetDataSource(dataTable As System.Data.DataTable)': 最も固有ではありません
-'Public Overridable Sub SetDataSource(enumerable As System.Collections.IEnumerable)': 最も固有ではありません
と表示されています。

なお、"dtitem"をDataGridに渡してやるとちゃんとデータを取得し表示できます。

このエラーの解決法をご教授願えませんでしょうか?
よろしくお願いします。

編集 削除
阿呆か  2008-07-14 15:48:20  No: 144937  IP: 192.*.*.*

>なお、"dtitem"をDataGridに渡してやるとちゃんとデータを取得し表示できます。

>crd.SetDataSource(tbitemflow)   <-エラー1

dtitem なんか渡してないやん。tbitemflow ってなに?

編集 削除
ニャン犬  2008-07-14 15:59:05  No: 144938  IP: 192.*.*.*

>阿呆か さん

>dtitem なんか渡してないやん。tbitemflow ってなに?

すみません、誤記です。
正しくは

crd.SetDataSource(dtitem)

です。

編集 削除
阿呆か  2008-07-14 16:09:18  No: 144939  IP: 192.*.*.*

>DSDataSet.ITEMDataTable
こんな訳の分からんクラスを指定されても対応してませんということでは?
DataTable にキャストして渡せば?

編集 削除
ニャン犬  2008-07-14 16:37:38  No: 144940  IP: 192.*.*.*

>阿呆か さん

>こんな訳の分からんクラスを指定されても対応してませんということでは?
一応DataSet.xsdで定義したつもりなんですけど…
他のサイトなんかのやり方を真似ていろいろやってみました。

>DataTable にキャストして渡せば?
dtitem2 = CType(dtitem, DataTable)
crd.SetDataSource(dtitem2)
としたところ表示できました。

なぜもともとの記述で表示できないのか、
疑問に思うところが多々ありますが
納得のいくように調べていきます。

ありがとうございました。

編集 削除