|
โค้ดชุดนี้แอดมินได้แจกจ่ายไปหลายตลบแล้ว เพราะย้ายเว็บบอร์ดอยู่เรื่อยๆ แต่ครั้งนี้จะมีลูกเล่นในเรื่องของไดนามิกเข้ามาเพิ่มเติมอีก นั่นคือเป็นการเขียนโค้ดเข้าช่วย เพื่อทำให้งานของเราดูดีมีชาติตระกูลมากขึ้น เช่น การกำหนดจำนวนหลักในการพิมพ์ การเลือกรูปแบบบาร์โค้ด และการพิมพ์กรอบ ...
การกำหนดจำนวนหลักใน AR Designer ... คลิ๊กเลือก Detail ใน Designer ก่อน ก็จะเห็นคุณสมบัติ (Properties) ...
หัวข้อที่เกี่ยวข้อง ...
การเรียกใช้งาน ActiveReports .NET แบบเบื้องต้น
[VB.NET] ก้าวแรกกับการพิมพ์รายงานด้วย ActiveReports .NET
[VB.NET] พื้นฐานการพิมพ์รายงานด้วย ActiveReports .NET ลงบนกระดาษขนาด A4
ดาวน์โหลด ActiveReports .NET (เฉพาะสมาชิกเท่านั้น)
เมื่อสั่งรันรายงานจาก Visual Basic IDE จะทำให้เกิดการทำงานที่เหตุการณ์ ReportStart ก่อน ...
- '// START HERE
- Private Sub arBarcode_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
- ' การตั้งค่าแบบ Run Time (มีหน่วยวัดเป็นนิ้ว ... แต่สามารถเปลี่ยนเป็น ซม. ได้ด้วย CmToInch)
- With PageSettings
- .Margins.Left = CmToInch(0.5)
- .Margins.Right = CmToInch(0.5)
- .Margins.Top = CmToInch(1)
- .Margins.Bottom = CmToInch(1)
- ' ตั้งค่ากระดาษแนวตั้ง
- .Orientation = PageOrientation.Portrait
- ' กระดาษขนาด A4
- .PaperKind = Drawing.Printing.PaperKind.A4
- ' กรณีที่กำหนดขนาดกระดาษเอง
- ' .PaperKind = Drawing.Printing.PaperKind.Custom
- End With
- '/ กำหนดรูปแบบบาร์โค้ด (Barcode Style) ...
- Select Case frmPrintBarcode.cmbStyle.SelectedIndex
- Case 0
- Barcode1.Style = BarCodeStyle.Code_128_A
- Case 1
- Barcode1.Style = BarCodeStyle.Code_128_B
- Case 2
- Barcode1.Style = BarCodeStyle.Code_128_C
- End Select
- '// กำหนดจำนวนหลักในการพิมพ์ (ความกว้างของกระดาษ / จำนวนหลัก)
- Select Case frmPrintBarcode.cmbColumn.SelectedIndex
- Case 0
- Me.Detail1.ColumnCount = 3
- Me.Shape1.Width = CmToInch(6.58)
- Me.Barcode1.Width = CmToInch(6.18)
- Case 1
- Me.Detail1.ColumnCount = 4
- Me.Shape1.Width = CmToInch(4.94)
- Me.Barcode1.Width = CmToInch(4.6)
- Case 2
- Me.Detail1.ColumnCount = 5
- End Select
- '// พิมพ์กรอบหรือไม่
- If frmPrintBarcode.chkPrintShape.Checked Then
- Shape1.Visible = True
- Else
- Shape1.Visible = False
- End If
- ' เคลียร์ค่าตัวแปรเพื่อความแน่ใจ
- ' Count = 0 : CountCode = 0 : BeginCode = 0
- ' รับค่ารหัสบาร์โค้ดตัวแรกเข้ามา
- BeginCode = Val(frmPrintBarcode.txtStartCode.Text)
- ' นับจำนวนของการพิมพ์บาร์โค้ดทั้งหมด
- ' CountCode = End - Begin + 1
- ' ต้องบวกเพิ่มอีก 1 เพื่อให้ได้ค่าที่ถูกต้อง และจะใช้ตัวแปรนี้ในโปรแกรมย่อย FetchData events
- CountCode = Val(frmPrintBarcode.txtEndCode.Text) - Val(frmPrintBarcode.txtStartCode.Text) + 1
- '//
- End Sub
คัดลอกไปที่คลิปบอร์ด
จากนั้นจำทำการเช็คข้อมูลว่ามีข้อมูลให้พิมพ์หรือไม่ที่ FetchData ...
- '// Sub Program ที่คอยตรวจสอบจำนวนข้อมูลในการพิมพ์
- '// หาก eArgs.EOF = True จะเป็นการสิ้นสุดการพิมพ์
- Private Sub arBarcode_FetchData(ByVal sender As Object, ByVal eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) Handles Me.FetchData
- Count = Count + 1
- ' หากนับได้ตรงตามจำนวนแล้วก็จะจบการทำงานในส่วนของการพิมพ์
- If Count > CountCode Then
- eArgs.EOF = True
- Exit Sub
- Else
- ' End Of File เป็นเท็จ ก็คือมันยังไม่หมดข้อมูลของการพิมพ์
- eArgs.EOF = False
- ' กระโดดไปทำงานต่อที่ Detal1_Format เพื่อทำการพิมพ์รหัสบาร์โค้ดต่อ
- End If
- End Sub
คัดลอกไปที่คลิปบอร์ด
แล้วเริ่มต้นการพิมพ์รายละเอียดใน Detail_Format ...
- '// รายละเอียดของการพิมพ์
- Private Sub Detail1_Format(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Detail1.Format
- ' จัดรูปแบบการพิมพ์รหัสบาร์โค้ดออกมา เช่น BeginCode = 199, ความยาว 9 ตัว
- ' "0000000000" & 199 ... จะได้ ... "0000000000199"
- ' พอนับจากทางขวามา 9 ตัว ก็จะถูกตัดเหลือ "000000199"
- Barcode1.Text = Right("0000000000" & BeginCode, Val(frmPrintBarcode.cmbLength.Text))
- ' การวางตำแหน่งของชุดคำสั่งนี้สำคัญมาก เพราะหากคุณวางไว้ก่อนบรรทัดข้างบน ผลที่ได้จะเกิด Logical Error
- ' หรือได้ผลลัพธ์ออกมาไม่ตรงตามที่ต้องการ
- BeginCode = BeginCode + 1
- ' จากจุดนี้มันก็จะกระโดดไป arBarcode_FetchData เพื่อตรวจสอบว่า Count นับได้ครบตาม CountCode หรือไม่
- End Sub
คัดลอกไปที่คลิปบอร์ด
มาดูโค้ดฉบับเต็มใน Visual Basic .NET ...
- Imports DataDynamics.ActiveReports
- Public Class frmPrintBarcode
- Private Sub btnPrintPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrintPreview.Click
- ' ดัก error จากการป้อนข้อมูล
- If Trim(txtStartCode.Text) = "" Or Len(Trim(txtStartCode.Text)) = 0 Then ' VB6 Style
- MessageBox.Show("กรุณาป้อนค่ารหัสเริ่มต้นให้เรียบร้อยก่อนด้วย.")
- txtStartCode.Focus()
- Exit Sub
- ElseIf Trim(txtEndCode.Text) = String.Empty Then ' VB.Net Style
- MessageBox.Show("กรุณาป้อนค่ารหัสสิ้นสุดให้เรียบร้อยก่อนด้วย.")
- txtEndCode.Focus()
- Return
- End If
- ' ค่ารหัสสิ้นสุดน้อยกว่าค่าเริ่มต้นไม่ได้
- If (Val(txtEndCode.Text) - Val(txtStartCode.Text) < 0) Then
- MessageBox.Show("ค่ารหัสสิ้นสุดมีค่าน้อยกว่ารหัสเริ่มต้น กรุณาป้อนใหม่ก่อนด้วย.")
- txtEndCode.Focus()
- Return
- End If
- '/ Instance name ARDesigner มันจะชี้ไปที่ไฟล์ arBarcode.vb
- Dim rpt As New arBarcode()
- '/ Run Report
- rpt.Run()
- '/ โหลดรายงาน document (arBarcode) เข้าสู่ ActiveReports Viewer
- Me.Viewer1.Document = rpt.Document
- Me.Viewer1.ReportViewer.Zoom = 1 '// 100%
- End Sub
- Private Sub frmPrintBarcode_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
- Select Case e.KeyCode
- Case Keys.F7
- Call btnPrintPreview_Click(sender, e)
- Case Keys.F10
- Call btnExit_Click(sender, e)
- End Select
- End Sub
- Private Sub frmPrintBarcode_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- With txtStartCode
- .Text = "999999900"
- .MaxLength = 9
- End With
- With txtEndCode
- .Text = "999999999"
- .MaxLength = 9
- End With
- ' กำหนดความยาวของรหัสบาร์โค้ด
- cmbLength.Items.Add("6") ' Index = 0
- cmbLength.Items.Add("7") ' Index = 1
- cmbLength.Items.Add("8") ' Index = 2
- cmbLength.Items.Add("9") ' Index = 3
- ' เลือกรายการแรก คือ 6 เป็นค่าตั้งต้น
- cmbLength.SelectedIndex = 0
- '// จำนวนหลักในการพิมพ์รหัสบาร์โค้ด
- With cmbColumn
- .Items.Add("3 หลัก")
- .Items.Add("4 หลัก")
- .Items.Add("5 หลัก")
- End With
- cmbColumn.SelectedIndex = 0
- '//
- With cmbStyle
- .Items.Add("Code 128A")
- .Items.Add("Code 128B")
- .Items.Add("Code 128C")
- End With
- cmbStyle.SelectedIndex = 1
- '//
- End Sub
- Private Sub btnExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnExit.Click
- Me.Close()
- End Sub
- '/ Function บังคับให้ผู้ใช้งานกดได้เฉพาะ 0-9 เท่านั้นใน TextBox
- '/ ผมใช้ ASCII Code เป็นเงื่อนไขในการทดสอบ
- '/ ขอให้พิจารณาถึงความแตกต่างของการใช้ IF-THEN-ELSE กับ SELECT CASE
- Function CheckDigitOnly(ByVal index As Integer) As Boolean
- Select Case index
- Case 48 To 57 ' ASCII Code Numeric 0 - 9
- CheckDigitOnly = False
- Case 8, 13 ' Backspace = 8, Enter = 13
- CheckDigitOnly = False
- Case Else
- CheckDigitOnly = True
- End Select
- End Function
- Private Sub txtStartCode_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtStartCode.KeyPress
- '// เกิดการกด ENter
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- Else
- '/ อ่านรายละเอียดเพิ่มเติม ... http://www.g2gnet.com/News/activenews_view.asp?articleID=106
- e.Handled = CheckDigitOnly(Asc(e.KeyChar))
- End If
- End Sub
- Private Sub txtEndCode_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtEndCode.KeyPress
- '// เกิดการกด ENter
- If e.KeyChar = Chr(13) Then
- e.Handled = True
- SendKeys.Send("{TAB}")
- Else
- '/ จะกระโดดไปทดสอบค่าที่ฟังค์ชั่น CheckDigitOnly
- '/ ASCII Code ของตัวอักขระ 0 - 9 โดยที่ 0 = 48, 1 = 49, 2 = 50, ... 9 = 57
- e.Handled = CheckDigitOnly(Asc(e.KeyChar))
- End If
- End Sub
- Private Sub frmPrintBarcode_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
- Me.Dispose()
- Application.Exit()
- End Sub
- Private Sub ToolStripStatusLabel2_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripStatusLabel2.Click
- Process.Start("http://www.g2gnet.com/webboard")
- End Sub
- Private Sub ToolStripStatusLabel3_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripStatusLabel3.Click
- Process.Start("mailto:thongkorn@hotmail.com")
- End Sub
- End Class
คัดลอกไปที่คลิปบอร์ด
โค้ดในส่วนของ ActiveReports .NET ...
ดาวน์โหลดโค้ดฉบับเต็ม VB.NET (2010) ได้ที่นี่ ...
|
ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง
คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน
x
|