Thursday, October 11, 2012

วิธีใช้ Crystal Report ใน ASP.Net

วิธีใช้ Crystal Report ใน ASP.Net

ใน Window App. ใช้ Crystal Report นั้นไม่ยาก
แต่ ใน Web App. ใช้ Crystal Report แล้วแต่ข้อมูลไม่ออกมาให้เห็น
จึงได้ทดลองค้นหาวิธีทำตั้งนานหลายชั่วโมง
จนกระทั่งทำได้สำเร็จได้ผลตามต้องการ
แต่นี่ยังไม่ใช่วิธีที่ดีที่สุด ก็ต้องทดลองใช้ดูแล้วค่อย ๆ พัฒนาหาวิธีการที่ดีกว่านี้
ในเบื้องต้นจะเอาตัวอย่างเท่าที่ทำได้ผลแล้วมาแสดงให้เห็นก่อนดังนี้
1.สร้าง Dataset ขึ้นมาสมมุติขื่อ Dataset1.xsd ในนี้มี DataTable ชื่อ DataTable1
2.สร้าง Crystal Report สมมุติชื่อ CR1.rpt
           - DataBase Expert > Project Data > ADO.NET Dataset > Dataset1
           - ทำตามขั้นตอนการสร้าง Crystal Report ทั่ว ๆ ไป
3.ใน Code-Behind เขียนคำสั่งดังนี้

Imports CrystalDecisions.Shared
Imports CrystalDecisions.CrystalReports.Engine
Imports System.Data.SqlClient

Partial Class DailyMeterList
 Inherits System.Web.UI.Page

 Dim R1 As New ReportDocument

 Protected Sub btnPreview_Click ...

  Dim xFile As String = Server.MapPath("CR1.rpt")
  R1.Load(xFile, OpenReportMethod.OpenReportByDefault)

  Dim objConn As New SqlConnection(YourConnectString)  
  Dim DA As SqlDataAdapter
  Dim ds As New DataSet
  Dim dt As DataTable
  Dim strCmd As String
  strCmd = "SELECT * FROM WorkTable  " 
  objConn.Open()
  DA = New SqlDataAdapter(strCmd, objConn)
  DA.Fill(ds, "DataTable1")
  dt = ds.Tables("DataTable1")

  R1.Database.Tables(0).SetDataSource(ds.Tables(0))
  V1.ReportSource = R1

 End Sub
End Class

'แต่เกิดปัญหาว่าเวลากด Next เพื่อดูหน้าต่อไปปรากฎว่า
'รายงานไม่แสดงผลเลยจึงแก้ด้วย Code ดังนี้

  Protected Sub Page_Load ...
  If Page.IsPostBack Then
     btnPreview_Click(sender, e)
  End If
 End Sub

3 comments:

  1. ความหมายของ Dim R1 As New ReportDocument คืออะไรครับตีความหมายไม่ออกนครับ ( ผมตีไปว่า ตัวแปล R1 เป็นที่เก็บ เอกสาร )

    ReplyDelete
    Replies
    1. ถูกต้องครับ
      เราต้องประกาศ Dim R1 As New ReportDocument
      เพื่อใช้ตัวแปร R1 เป็นตัวแทนของ ออปเจค ReportDocument

      Delete
  2. สอบถามหน่อยนะคะ ถ้าตรง
    Imports CrystalDecisions.Shared
    Imports CrystalDecisions.CrystalReports.Engine
    Dim R1 As New ReportDocument
    เกิดขึ้น error วิธีแก้ไขอย่างไรบ้างคะ รบกวนด้วยนะคะ

    ReplyDelete