ผู้เขียน หัวข้อ: [VB.NET] แจกโค้ดการพิมพ์ใบเสร็จรับเงิน ขนาดหน้ากว้าง 3 นิ้วด้วย ActiveReport.NET  (อ่าน 386 ครั้ง)

ออฟไลน์ ทองก้อน ทับทิมกรอบ

  • Administrator
  • *****
  • กระทู้: 245
  • เพศ: ชาย
  • Webmaster G2GNet
จากครั้งที่แล้วได้ แจกโค้ด VB6 กับการพิมพ์ใบเสร็จรับเงิน ขนาดหน้ากว้าง 3 นิ้ว ด้วย ActiveReport 2.0 ... คราวนี้ถึงทีโค้ด Visual Basic .Net กับ ActiveReports Net Framework กันบ้าง ในแง่ของทฤษฎีหรือหลักการ แอดมินขี้เกียจจะสาธยายให้มากความ สรุปสั้นๆให้ได้ใจความว่า มันใช้หลักการเดียวกันของทั้ง 2 เวอร์ชั่น ดังนั้นท่านทั้งหลายก็ต้องใช้ความสามารถในการค้นหาข้อมูลต่างๆกันเอาเองน่ะครับ ซึ่งก็หนีไม่พ้นแหล่งข้อมูลของเว็บไซต์จีทูจีเน็ตดอตคอมอีกตามเคยนั่นแหละข่ะรับ 5555+ ...

หลายคนคงสงสัยว่าทำไมแอดมินถึงได้เลือกใช้ ActiveReports หรือชื่อย่อว่า AR มาตลอด ก็เพราะ ...

- อย่างแรกเลยไฟล์ที่ใช้งานมีขนาดไม่ใหญ่โต และมีไม่กี่ไฟล์เท่านั้น เวลาที่นำไปติดตั้งกับเครื่องอื่น (Clients) โอกาสที่จะเกิด Run Time Error น้อยกว่า Crystal Reports หรือ CR

- ในการใช้งาน UnBound Data Control หรือ การไม่ผูกฟิลด์ข้อมูลไว้กับคอนโทรล (เช่น TextBox) สามารถทำออกมาได้ง่าย ทำงานได้อย่างรวดเร็วทันใจ ... อันนี้ถือได้ว่าจ๊าบสุดๆ

- มีแหล่งข้อมูลน้อย ยิ่งทำให้เร้าใจในการเรียนรู้ซิครับ อันนี้หัวใจซาดิสต์จริงๆ 5555+ ... และอื่นๆอีกเยอะหากเทียบกับ CR


เมื่อสั่งรันโปรแกรม ... ลักษณะแบบนี้ที่เรียกว่า Unbound Data Control ครับพี่น้อง

ดาวน์โหลด ActiveReports Net Framework จากผู้ผลิต

หากท่านบังเอิญผ่านมาเจอเว็บไซต์แห่งนี้ ต้องดูรายละเอียดตามลิ้งค์ด้านล่างนี้ก่อนด้วยครับ

[VB.NET] เริ่มต้นเรียกใช้งาน ActiveReports V6.2.3681
[VB.Net] การตั้งค่ารายงาน (Report Setting) สำหรับ ActiveReport 6.0 (.Net)

ดาวน์โหลด ActiveReports V6.2.3681 (สำหรับสมาชิกเท่านั้น)

โค้ดในส่วนของฟอร์มหลัก

การอ้างอิงถึง ActiveReports

โค๊ด: [Select]
' / -----------------------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: www.facebook.com/g2gnet
' / Purpose : Print 3 Inch Slip with ActiveReports.NET 6.0
' / Microsoft Visual Basic .NET (2010) SP1
' / -----------------------------------------------------------------------------------------------
Imports DataDynamics.ActiveReports

Public Class frmPrintSlip3Inch

    ' / -------------------------------------------------------------------------------------------------------------
    ' / ตั้งค่า ListView Control
    Sub InitListView()
        ' Initialize ListView Control
        With lvwData
            .View = View.Details
            .GridLines = True
            .FullRowSelect = True
            .HideSelection = False
            .MultiSelect = False
            ' ใช้ทั้งหมด 4 หลัก โดยหลักแรก มีค่า Index = 0
            .Columns.Add("Primary Key", 0)
            .Columns.Add("รหัสสินค้า", lvwData.Width \ 4 + 20)
            .Columns.Add("ชื่อสินค้า", lvwData.Width \ 4 + 10)
            .Columns.Add("ราคา", lvwData.Width \ 4 + 10)
        End With
    End Sub

    ' / -------------------------------------------------------------------------------------------------------------
    ' / ใส่ข้อมูลตัวอย่างให้กับ ListView Control
    Sub ListViewData()
        Dim LV As ListViewItem
        ' แถวที่ 1
        LV = lvwData.Items.Add("1")  ' สร้างโหนดหลัก
        LV.SubItems.Add("1234567890ABC")
        LV.SubItems.Add("หนังสือ VB.Net")
        LV.SubItems.Add("555.55")
        ' แถวที่ 2
        LV = lvwData.Items.Add("2")
        LV.SubItems.Add("1234567890128")
        LV.SubItems.Add("เส้นทางสายฟรีแลนซ์")
        LV.SubItems.Add("999.99")
        ' แถวที่ 3
        LV = lvwData.Items.Add("3")
        LV.SubItems.Add("123456789XYZ")
        LV.SubItems.Add("VB.Net for Beginner")
        LV.SubItems.Add("50.00")
    End Sub

    Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
        Application.Exit()
    End Sub

    Private Sub btnPrintPreview_Click(sender As System.Object, e As System.EventArgs) Handles btnPrintPreview.Click
        ' Instance name ARDesigner มันจะชี้ไปที่ไฟล์ arBarcode.vb
        Dim rpt As New arPrintSlip3Inch()
        ' Run Report
        rpt.Run()
        ' โหลดรายงาน document (arPrintSlip3Inch) เข้าสู่ ActiveReports Viewer
        Me.Viewer1.Document = rpt.Document
    End Sub

    Private Sub frmPrintSlip3Inch_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
        Select Case e.KeyCode
            Case Keys.F7
                Call btnPrintPreview_Click(sender, New System.EventArgs())
            Case Keys.F10
                Call btnExit_Click(sender, New System.EventArgs())
        End Select
    End Sub

    Private Sub frmPrintSlip3Inch_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
        ' ปรับ Control Size แบบง่ายๆ
        With Me.Viewer1
            .Width = Me.Width - 22
            .Height = Me.Height - lvwData.Top - StatusStrip1.Height - .Top - 28
        End With
        btnPrintPreview.Left = Me.Width - btnPrintPreview.Width - 20
        btnExit.Left = btnPrintPreview.Left
    End Sub

    Private Sub frmPrintSlip3Inch_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Me.CenterToScreen()
        Call InitListView()
        Call ListViewData()
    End Sub

    Private Sub Viewer1_Load(sender As System.Object, e As System.EventArgs) Handles Viewer1.Load
        ' Run Time
        Viewer1.ReportViewer.DisplayUnits = Viewer.DisplayUnits.Metric
        Viewer1.ReportViewer.Zoom = 0.85    ' Zoom 85 %
    End Sub
End Class

โค้ดในส่วนของ ActiveReports 6.0

หน้าจอ ActiveReports Designer

โค๊ด: [Select]
' / -----------------------------------------------------------------------------------------------
' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
' / eMail : thongkorn@hotmail.com
' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
' / Facebook: www.facebook.com/g2gnet
' / Purpose : Print 3 Inch Slip with ActiveReports.NET 6.0
' / Microsoft Visual Basic .NET (2010) SP1
' / -----------------------------------------------------------------------------------------------
Imports DataDynamics.ActiveReports
Imports DataDynamics.ActiveReports.Document

Public Class arPrintSlip3Inch
    ' ตัวแปรนี้ต้องประกาศเป็นแบบ Public เพื่อให้ส่วนของ Detail1_Format และ FetchData มองเห็นด้วย
    Private ItemNo As Integer
    Private GrandTotal As Double

    Private Sub arPrintSlip3Inch_FetchData(sender As Object, eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) Handles Me.FetchData
        ItemNo = ItemNo + 1
        ' ตรวจสอบจำนวนการพิมพ์ทั้งหมด ด้วยการนับจำนวนแถวใน ListView ที่อยู่ในฟอร์มหลัก
        ' จะส่งค่าจำนวนแถวมาก็ได้ แต่ผมเลือกอ้างถึงตัว ListView ใน frmPrintSlip3Inch โดยตรง เพราะไม่เปลืองตัวแปร (Optimized)
        If ItemNo > frmPrintSlip3Inch.lvwData.Items.Count Then
            ' หากหมดแล้วก็จบการพิมพ์
            eArgs.EOF = True
            Exit Sub
            ' ยังไม่หมดข้อมูล
        Else
            eArgs.EOF = False
        End If

    End Sub

    Private Sub Detail1_Format(sender As Object, e As System.EventArgs) Handles Detail1.Format
        ' การอ้างถึงค่าในแต่ละแถว, หลักของ ListView Control ที่อยู่ใน frmPrintSlip3Inch
        ' ค่า ItemNo เริ่มต้นจาก 1 แต่ลำดับแถวใน ListView จะเริ่มต้นจาก 0 (Index=0) ก็เลยต้องลบออกด้วย 1
        txtItem.Text = frmPrintSlip3Inch.lvwData.Items(ItemNo - 1).SubItems(0).Text
        ' แถว 0 หลัก 2
        txtDescription.Text = frmPrintSlip3Inch.lvwData.Items(ItemNo - 1).SubItems(2).Text
        ' แถว 0 หลัก 3
        txtPrice.Text = frmPrintSlip3Inch.lvwData.Items(ItemNo - 1).SubItems(3).Text
        ' รวมราคาผ่านทางตัวแปร
        GrandTotal = GrandTotal + Val(txtPrice.Text)

        ' จากนี้มันก็กระโดดกลับไปที่ Sub AR6PrintEmployee_FetchData เพื่ออ่านค่าเข้ามาพิมพ์ใหม่
        ' หากหมดจำนวนแถวที่ต้องการพิมพ์ (นับจำนวนแถวใน ListView) ก็จะจบการทำงาน (EOF=True)
    End Sub

    ' / -------------------------------------------------------------------------------------------------------------
    ' / ทุกๆครั้งที่เริ่มต้นสั่งพิมพ์ จะต้องตั้งค่าเริ่มต้นใน ReportStart เพียงครั้งแรกและครั้งเดียว
    Private Sub arPrintSlip3Inch_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
        ' การตั้งค่าหน้ากระดาษ
        With PageSettings
            ' หน่วยวัดเป็นนิ้ว
            .Margins.Left = CmToInch(0.5) ' แปลงค่า 0.5 ซม. เป็นนิ้ว
            .Margins.Right = 0.1
            .Margins.Top = 0.2
            .Margins.Bottom = 0.2
            ' ตั้งค่ากระดาษแนวตั้ง
            .Orientation = PageOrientation.Portrait
            ' กระดาษขนาด A4
            '.PaperKind = Drawing.Printing.PaperKind.A4
            ' กรณีที่กำหนดขนาดกระดาษเอง
            .PaperKind = Drawing.Printing.PaperKind.Custom
            .PaperWidth = CmToInch(7.6) ' 7.6 ซม.
        End With
        ' ปกติต้องเคลียร์ค่าต่างๆของ TextBox ก่อนการพิมพ์
        txtItem.Text = ""
        txtDescription.Text = ""
        txtPrice.Text = ""
        txtGrandTotal.Text = ""
    End Sub

    Private Sub GroupFooter1_Format(sender As System.Object, e As System.EventArgs) Handles GroupFooter1.Format
        txtGrandTotal.Text = "รวมจำนวนเงิน: " & Format(GrandTotal, "#,##0.00") & ""
    End Sub
End Class

Conclusion:
ก็คงแทบจะไม่ต้องมีการบรรยายสรุปอะไรเลย เพราะ ActiveReports.NET มันก็ใช้หลักการคิดเดียวกันกับ ActiveReports 2.0 (COM) เหมือนกันหมดเลย

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่

[VB.NET] เริ่มต้นเรียกใช้งาน ActiveReports V6.2.3681
[VB.Net] การตั้งค่ารายงาน (Report Setting) สำหรับ ActiveReport 6.0 (.Net)

ดาวน์โหลด ActiveReports V6.2.3681 (สำหรับสมาชิกเท่านั้น)

บันทึกการเข้า
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

ออฟไลน์ pankiat913

  • Newbie
  • *
  • กระทู้: 15
ขอบคุณอาจารย์

บันทึกการเข้า

ออฟไลน์ Mr.Den

  • Jr. Member
  • **
  • กระทู้: 73
  • เพศ: ชาย
ขอบคุณครับผม. :) ;)

บันทึกการเข้า

ออฟไลน์ โจ้

  • Newbie
  • *
  • กระทู้: 21
ขอบคุณครับ  :D

บันทึกการเข้า