Skip to Content

Archived discussions are read-only. Learn more about SAP Q&A

How to Bind .NET Objects as DataSource to a Report? (DataSourceException)

Hello,

I'm already trying for hours and I still can't produce a Report from scratch with a .NET Object.

Everytime I call the SetDataSource-Method, I Get the DataSourceException:

I'm using Visual Studio 2013 Update 5 with CRforVS_13_0_13

Failed to load database information.

Error in File temp_54f4ace5-3d4b-49f4-a633-cb7098cbf8bd 10164_1776_{D1ADA617-8049-497D-BD87-2530EA8EEE81}.rpt:

Stack:

   at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)

   at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)

   at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)

   at WindowsApplication12.Form1.Button1_Click(Object sender, EventArgs e) in c:\users\danielr\documents\visual studio 2013\Projects\WindowsApplication12\WindowsApplication12\Form1.vb:line 18

   at System.Windows.Forms.Control.OnClick(EventArgs e)

   at System.Windows.Forms.Button.OnClick(EventArgs e)

   at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)

   at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)

   at System.Windows.Forms.Control.WndProc(Message& m)

   at System.Windows.Forms.ButtonBase.WndProc(Message& m)

   at System.Windows.Forms.Button.WndProc(Message& m)

   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)

   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)

What I'm doing:

I have a simple WinForms Application in which is just a Button. In the Click-Event I Initialize the Report, a List(Of TestClass) and a DataSet out of the List. Then I'm setting the DataSource and the Exceptionis thrown. For the Report I made a XSD File out of the List first, then generated the Report and set the XSD as DataSourceConnection for the Report.

Here is the SourceCode:

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        ''Initialize

        Dim testData = GenerateTestData()

        Dim dataSet = ListToDataSet(testData)

        Dim report = New CrystalReport1()

        ''Make a XSD File out of the DataSet for the Report (this step is just made initially)

        'Dim writer = New IO.StreamWriter("Test.xsd")

        'dataSet.WriteXmlSchema(writer)

        'writer.Close()

        ''Set the DataSource for the Report

        report.SetDataSource(dataSet)

        ''Export it to a PDF and then open it

        report.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat, "test.pdf")

        Process.Start("test.pdf")

        ''Exit the Application

        Application.Exit()

    End Sub


    ''' <summary>

    ''' Generates some TestData

    ''' </summary>

    ''' <returns></returns>

    ''' <remarks></remarks>

    Public Function GenerateTestData() As List(Of TestClass)

        Dim r = New Random()

        Dim list = New List(Of TestClass)

        For i As Integer = 0 To 100

            list.Add(New TestClass() With {.Betrag = r.Next(),

                                           .Name = "TestName" & i})

        Next

        Return list

    End Function


    ''' <summary>

    ''' Makes a DataSet

    ''' </summary>

    ''' <typeparam name="T"></typeparam>

    ''' <param name="dataList"></param>

    ''' <returns></returns>

    ''' <remarks></remarks>

    Public Function ListToDataSet(Of T)(dataList As IEnumerable(Of T)) As DataSet

        Dim dataTable = New DataTable(GetType(T).Name)

        Dim propInfos() As PropertyInfo = Nothing

        For Each rec As T In dataList

            If propInfos Is Nothing Then

                propInfos = rec.GetType().GetProperties()

                For Each propInfo In propInfos

                    Dim columnType = propInfo.PropertyType

                    If columnType.IsGenericType AndAlso columnType.GetGenericTypeDefinition = GetType(Nullable(Of )) Then

                        columnType = columnType.GetGenericArguments(0)

                    End If

                    dataTable.Columns.Add(New DataColumn(propInfo.Name, columnType))

                Next

            End If

            Dim dataRow As DataRow = dataTable.NewRow()

            For Each propInfo In propInfos

                dataRow(propInfo.Name) = If(propInfo.GetValue(rec, Nothing), DBNull.Value)

            Next

            dataTable.Rows.Add(dataRow)

        Next

        Dim dataSet = New DataSet()

        dataSet.Tables.Add(dataTable)

        Return dataSet

    End Function

End Class


The Test Class is quite simple:

Public Class TestClass

    Property Name As String

    Property Betrag As Integer

End Class

The Report is just made out of the Standard Dialogue (New Item => Crystal Report => OK => Selected the TestClass DataSet => Next and so on) and looks like this

Could someone please help me?

replied

See if this KBA will help.

Oh. And update to SP 14 (use the install exe). SP 13 was a bit weak.

- Ludek

Senior Support Engineer AGS Product Support, Global Support Center Canada

Follow me on Twitter

Message was edited by: Ludek Uher

0 View this answer in context
Not what you were looking for? View more on this topic or Ask a question