Ciao.
Il problema allora non è CR ma il resto dell'applicazione. Premesso che non uso CR provo a postare un piccolo esempio (VB2005, crea nuovo progetto di tipo Windows Forms).
Prima di tutto devi predisporre la classe che farà da origine dati. Su questo argomento potremmo scrivere per ore perché ci sono precise tecniche di implementazione. Per non perdere il nostro obiettivo (agganciare il report ad una origine dati basata su oggetti .NET) tralascio questo argomento e passo al sodo. Creiamo una banale classe (progetto, nuova classe, Cliente.vb) per gestire i dati di un cliente.
Public Class Cliente
Private _id As String
Private _text As String
Public Sub New(ByVal i As String, ByVal t As String)
Me.Id = i
Me.Text = t
End Sub
Public Property Id() As String
Get
Return _id
End Get
Set(ByVal value As String)
_id = value
End Set
End Property
Public Property Text() As String
Get
Return _text
End Get
Set(ByVal value As String)
_text = value
End Set
End Property
End Class
La classe gestisce due proprietà (codice e nome del cliente). A questo punto (dopo aver compilato il programma) dovrai specificare quale oggetto utilizzare come origine dati del report (a tale proposito aggiungerai, per il nostro esempio, un nuovo crystal report al progetto). Devi procedere come da precedenti istruzioni (Database Expert, Project Data, .NET Objects, LaMiaApplicazione.Cliente). Una volta specificata l'origine dati trascina semplicemente le proprietà dell'oggetto nella superficie di progettazione del report.
L'ultimo passaggio consiste nell'eseguire il binding dei dati tra report e classe .NET. Chiaramente questa attività viene di norma svolta leggendo dei dati da un database (la tabella clienti) e creando istanze della classe (una per ogni record). Senza entrare nel merito di questo passaggio simuleremo il tutto semplicemente aprendo il Form1 (creato automaticamente nel tuo progetto), inserendo un semplice bottone ed associando il codice che segue all'evento Click del bottone:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Simulo il popolamento della classe che, si presume, avvenga tramite un database
' Allo scopo creo "una lista" di oggetti "Cliente"
Dim c1 As New List(Of Cliente)
c1.Add(New Cliente("1.1", "Cliente 1.1"))
c1.Add(New Cliente("1.2", "Cliente 1.2"))
' Creo l'istanza del report
Dim c As New CrystalReport1
' Assegno il datasource (trasformando la lista di oggetti in un array di oggetti di tipo Cliente)
c.Database.Tables(0).SetDataSource(c1.ToArray())
' Esportoil report
c.ExportToDisk(CrystalDecisions.Shared.ExportFormatType.HTML40, "C:\MioReport.htm")
' Finito
End Sub
Ho commentato il codice quindi non dovresti avere difficoltà di interpretazione (in ogni caso siamo qui, posta ancora).
Soluzioni alternative a quella illustrata e che non utilizzino DataSet consistono spesso nel produrre contenuti XML da dare in pasto al sistema di reporting (resto sul vago perché uso spesso questa tecnica ma, ripeto, non so se CR lo consenta).
Ciao.