 |
|
Crystal Report เชื่อมต่อกับ MySQL มันขึ้น Popup ให้ใส่ password |
|
 |
|
|
 |
 |
|
การดึง Report โดยใช้ Crytalreport โดยใช้ Mysql นั้นให้มองว่า มันก็คือ ฐานข้อมูล ให้เราใช้ dataset เป็นตัวกลาง ลองทำตามผม ไปทีละขั้น และประยุกต์ในโปรเจ็คของคุณนะครับ
01. ให้ทำการ Add New Data Set ดังรูป

02. Double Click ที่ DataSet และ คลิ๊กขวา Add DataTable ดังรูป

03. ใส่ชื่อ Field ที่ต้องการ เช่น ผมจะทำรายงานแสดงข้อมูลสินค้าก็มี ข้อมูล เกี่ยวกับสินค้า โดย Field ข้อมูลพวกนี้ต้องเป็นข้อมูลที่ตรงกับ Field ใน Table ด้วยนะครับ ดังรูป

04. Add Crytal Reports

05. เลือกแบบ Wizard (หัวข้อแรก) จะมาหน้าในรูป ให้เลือก ADO.NET DataSets และทำตามรูปดังภาพ

06. เลือก Field ที่ต้องการอีกรอบ หรือ เอาหมด ดังรูป

07. Add Form นำ CrystalReportViewer มายัดลง Form จะได้ ดังรูป

08. เนื่องจาก Form2 ผมเป็น Form แสดงรายงาน และ Form1 เป็น Form แสดงข้อมูลสินค้าผ่าน DataGridview และ มี Button เพื่อทำการออกรายงานมายัง Form2 (ส่วนคนที่ยังไม่มี Form1 ก็ให้สร้าง Form ใหม่ชื่ออะไรก็ได้ และ ยัด DataGridview และ Button อย่างละหนึ่ง)
09. Double Click ที่ Button เอา Code นี่ไปใส่
Code (VB.NET)
Dim dsEx As New DataSet1()
If dsEx.DataTableOrder.Rows.Count > 0 Then
dsEx.DataTableOrder.Rows.Clear()
End If
For i As Integer = 0 To DataGridView1.Rows.Count - 1
Dim dr As DataGridViewRow = Nothing
dr = DataGridView1.Rows(i)
dsEx.DataTableOrder.Rows.Add(dr.Cells(0).Value, dr.Cells(1).Value, dr.Cells(2).Value, dr.Cells(3).Value, dr.Cells(4).Value, dr.Cells(5).Value, dr.Cells(6).Value)
Next
'DataGridViewRow dr = default(DataGridViewRow);
'dsEx.DataTable1.Rows.Add("1","2","3","4");
Dim crv As New CrystalReportOrder()
crv.SetDataSource(dsEx)
'crv.SetParameterValue("date", String.Format("{0:d MMMM yyyy}", DateTime.Now));
Dim frm As New FormReport()
frm.CrystalReportViewer1.ReportSource = crv
frm.ShowDialog()
อธิบาย Code ที่ Comment
Code (VB.NET)
'เป็นการส่งค่าแค่ Column เดียวผมเอาไว้ใช้ในกรณีที่ ผมต้องการประยุกต์ เช่น ทำบัตรสมาชิก เป็นต้น
'DataGridViewRow dr = default(DataGridViewRow);
'dsEx.DataTable1.Rows.Add("1","2","3","4");
'เป็นการส่งค่า Parameter สังเกตว่า ใน หน้า Design CrytalReport จะมีให้ใส่ Parameter เราสามารถเขียน Code เพื่อส่ง Parameter ไปได้
'crv.SetParameterValue("date", String.Format("{0:d MMMM yyyy}", DateTime.Now));
ปล. ผิดพลาดประการใด ขออภัยมา ณ ที่นี้
|
 |
 |
 |
 |
Date :
2016-06-13 14:11:57 |
By :
bigsuntat |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าอยากหมดปัญหานี้จะต้องเปลี่ยนไปใช้พวก DataSet/DataTable แทนครับ หรือไม่ใช้ตัวนี้ก็ได้ครับ ผมใช้อยู่
Code (VB.NET)
Private strSheetNo As String = String.Empty
Private rpt As ReportDocument
Protected Sub Page_Load(sender As Object, e As EventArgs)
rpt = New ReportDocument()
rpt.Load(Server.MapPath("../report/myReport.rpt"))
Dim crtableLogoninfo As New TableLogOnInfo()
Dim crConnectionInfo As New ConnectionInfo()
Dim CrTables As Tables
Dim db = UtilityClass.GetDatabaseConnection()
crConnectionInfo.ServerName = "localhost"
crConnectionInfo.DatabaseName = "mydatabase"
crConnectionInfo.UserID = "sa"
crConnectionInfo.Password = ""
CrTables = rpt.Database.Tables
For Each CrTable As CrystalDecisions.CrystalReports.Engine.Table In CrTables
crtableLogoninfo = CrTable.LogOnInfo
crtableLogoninfo.ConnectionInfo = crConnectionInfo
CrTable.ApplyLogOnInfo(crtableLogoninfo)
Next
rpt.RecordSelectionFormula = "{tbReport.CusNo} in [" + strCustomerNo + "] "
Me.rptCrystal.ReportSource = rpt
End Sub
Protected Overrides Sub OnUnload(e As EventArgs)
MyBase.OnUnload(e)
Try
If rpt IsNot Nothing Then
rpt.Close()
rpt.Dispose()
GC.Collect()
End If
Catch ex As Exception
MessageLogClass.WriteLog(ex)
End Try
End Sub
Protected Sub rptCrystal_Unload(sender As Object, e As EventArgs)
Try
If rpt IsNot Nothing Then
rpt.Close()
rpt.Dispose()
GC.Collect()
End If
Catch ex As Exception
MessageLogClass.WriteLog(ex)
End Try
End Sub
|
 |
 |
 |
 |
Date :
2016-06-13 17:00:50 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณคับ
|
 |
 |
 |
 |
Date :
2016-06-14 16:27:27 |
By :
thep |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|