Penjawab teratas
[Tanya] Binding Data dari database Ke Crystal report dengan Linq

Pertanyaan
-
selamt sore master sekalian,,,
saya mau nanya nih,, bagaimana cara untuk binding data ke dalam Crystal Report dengan menggunakan Linq.??
saya menggunakan vb.net 2008 dan Database SQL Server 2008.
sebelumnya saya sudah mencoba dengan menggunakan code seperti ini :
1. code untuk menampilkan data ke dalam Crystal Report. :Private Sub DaftarStudioWithInstrumentToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DaftarStudioWithInstrumentToolStripMenuItem.Click Dim fkt As New Qstuido Dim LP = (From p In SQL.SelectAllQstudio Select p).ToList(0) Me.Cursor = Cursors.WaitCursor Dim reportName As String = ReportFolder & "\RPT_DaftarInstrument.rpt" If My.Computer.FileSystem.FileExists(reportName) = False Then MsgBox("Laporan tidak ditemukan", MsgBoxStyle.Critical, MessageboxTitle) Exit Sub End If Using Frm As New ReportForm Using Crep As New ReportDocument Crep.Load(reportName, CrystalDecisions.Shared.OpenReportMethod.OpenReportByDefault) SetPaperSize(Crep) Crep.SetDataSource(LP) With Frm.CrystalReportViewer1 .RefreshReport() .ReportSource = Crep End With Frm.ShowDialog() End Using End Using Me.Cursor = Cursors.Default End Sub
2. Fungsi untuk mengambil data dari table :
Public Shared Function SelectAllQstudio() As List(Of Qstuido) Dim AllData As List(Of Qstuido) = Nothing Using dc As New RedRockStudioDataContext(GlobalModule.ConnectionString) dc.ObjectTrackingEnabled = False AllData = dc.Qstudios.ToList() dc.Dispose() End Using Return AllData End Function
3. ini untuk code pada Class Qstudio, yang di letak dari File DataClassess.dbml yang bernama : RedRockStudioDataContext.dbml
<Table(Name:="dbo.Qstudio")> _ Partial Public Class Qstuido Implements System.ComponentModel.INotifyPropertyChanging, System.ComponentModel.INotifyPropertyChanged Private Shared emptyChangingEventArgs As PropertyChangingEventArgs = New PropertyChangingEventArgs(String.Empty) Private _StudioNo As Integer Private _StudioName As String Private _instrumentID As String Private _Nama As String Private _Merek As String Private _Jumlah As System.Nullable(Of Integer) #Region "Extensibility Method Definitions" Partial Private Sub OnLoaded() End Sub Partial Private Sub OnValidate(ByVal action As System.Data.Linq.ChangeAction) End Sub Partial Private Sub OnCreated() End Sub Partial Private Sub OnstudioNoChanging(ByVal value As Integer) End Sub Partial Private Sub OnstudioNoChanged() End Sub Partial Private Sub OnStudioNameChanging(ByVal value As String) End Sub Partial Private Sub OnStudioNameChanged() End Sub Partial Private Sub OninstrumentIDChanging(ByVal value As String) End Sub Partial Private Sub OninstrumentIDChanged() End Sub Partial Private Sub OnNamaChanging(ByVal value As String) End Sub Partial Private Sub OnNamaChanged() End Sub Partial Private Sub OnMerekChanging(ByVal value As String) End Sub Partial Private Sub OnMerekChanged() End Sub Partial Private Sub OnJumlahChanging(ByVal value As System.Nullable(Of Integer)) End Sub Partial Private Sub OnJumlahChanged() End Sub #End Region Public Sub New() MyBase.New() OnCreated() End Sub <Column(Storage:="_StudioNo", DbType:="Int NOT NULL")> _ Public Property StudioNo() As Integer Get Return Me._StudioNo End Get Set(ByVal value As Integer) If ((Me._StudioNo = value) _ = False) Then Me.OnstudioNoChanging(value) Me.SendPropertyChanging() Me._StudioNo = value Me.SendPropertyChanged("StudioNo") Me.OnstudioNoChanged() End If End Set End Property <Column(Storage:="_StudioName", DbType:="VarChar(500) NOT NULL")> _ Public Property StudioName() As String Get Return Me._StudioName End Get Set(ByVal value As String) If (String.Equals(Me._StudioName, value) = False) Then Me.OnStudioNameChanging(value) Me.SendPropertyChanging() Me._StudioName = value Me.SendPropertyChanged("StudioName") Me.OnStudioNameChanged() End If End Set End Property <Column(Storage:="_instrumentID", DbType:="varchar(50) NOT NULL")> _ Public Property instrumentID() As String Get Return Me._instrumentID End Get Set(ByVal value As String) If ((Me._instrumentID = value) _ = False) Then Me.OninstrumentIDChanging(value) Me.SendPropertyChanging() Me._instrumentID = value Me.SendPropertyChanged("InstrumentID") Me.OninstrumentIDChanged() End If End Set End Property <Column(Storage:="_Nama", DbType:="VarChar(500) NOT NULL")> _ Public Property Nama() As String Get Return Me._Nama End Get Set(ByVal value As String) If (String.Equals(Me._Nama, value) = False) Then Me.OnNamaChanging(value) Me.SendPropertyChanging() Me._Nama = value Me.SendPropertyChanged("InstrumentName") Me.OnNamaChanged() End If End Set End Property <Column(Storage:="_Merek", DbType:="VarChar(500) NOT NULL")> _ Public Property Merek() As String Get Return Me._Merek End Get Set(ByVal value As String) If (String.Equals(Me._Merek, value) = False) Then Me.OnMerekChanging(value) Me.SendPropertyChanging() Me._Merek = value Me.SendPropertyChanged("Merek") Me.OnMerekChanged() End If End Set End Property <Column(Storage:="_Jumlah", DbType:="Int NOT NULL")> _ Public Property Jumlah() As System.Nullable(Of Integer) Get Return Me._Jumlah End Get Set(ByVal value As System.Nullable(Of Integer)) If (Me._Jumlah.Equals(value) = False) Then Me.OnJumlahChanging(value) Me.SendPropertyChanging() Me._Jumlah = value Me.SendPropertyChanged("Jumlah") Me.OnJumlahChanged() End If End Set End Property Public Event PropertyChanging As PropertyChangingEventHandler Implements System.ComponentModel.INotifyPropertyChanging.PropertyChanging Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Protected Overridable Sub SendPropertyChanging() If ((Me.PropertyChangingEvent Is Nothing) _ = False) Then RaiseEvent PropertyChanging(Me, emptyChangingEventArgs) End If End Sub Protected Overridable Sub SendPropertyChanged(ByVal propertyName As [String]) If ((Me.PropertyChangedEvent Is Nothing) _ = False) Then RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propertyName)) End If End Sub End Class
SETELAH SAYA RUN PROGRAMNYA :
MUNCUL PESAN ERROR SEPERTI GAMBAR INI (gambar 1.Sebelum Di Debug, Gambar 2. Setelah di debug):
untuk Data yang ada di dalam database seperti ini :
kira kira itu dimana ya salahnya..????
mohon bantuannya ya...
terima kasih..
by : Tafarie.
- Diedit oleh Ari Mustafa Sabtu, 27 Juli 2013 10.22
Sabtu, 27 Juli 2013 10.21
Jawaban
-
Hi Tafarie
Mohon maaf atas keterlambatan membalas forum ini
"LP" disitu adalah anonymus yang memiliki nilai nullable jika salah satu dari hasilnya adalah nol.
"LP" tidak bisa menerjemahkan object yang nullable menjadi sebuah DataTable yang SetDataSource tengah proses.
Anda mungkin menemukan implicitly converting 'data' ke sebuah DataTable terlebih dahulu sehingga Anda dapat mengontrol konversinya.
Silakan lihat contoh untuk metode diatas
http://stackoverflow.com/questions/1253725/convert-ienumerable-to-datatableDan Anda bisa lihat thread berikut:
http://www.codeproject.com/Questions/278857/How-to-create-Crystal-Report-with-query-by-linq
http://forums.asp.net/t/1702547.aspx/1Semoga membantu
Terima kasih
Andy Nugraha
TechNet Community Support
- Disarankan sebagai Jawaban oleh Andy NugrahaModerator Selasa, 06 Agustus 2013 03.11
- Ditandai sebagai Jawaban oleh Andy NugrahaModerator Senin, 12 Agustus 2013 02.00
Selasa, 06 Agustus 2013 03.11Moderator