cancel
Showing results for 
Search instead for 
Did you mean: 

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

Former Member
0 Kudos

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?

Accepted Solutions (1)

Accepted Solutions (1)

former_member183750
Active Contributor
0 Kudos

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

Former Member
0 Kudos

Thanks, that helped!

Answers (0)