ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 6895|ตอบกลับ: 0

[VB.NET] การพิมพ์ใบเสร็จด้วย ActiveReports .NET ลงกระดาษขนาด A4 และ A5 (ครึ่ง A4)

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583



อันที่จริงโค้ดชุดนี้แอดมินทำแจกไว้ตั้งแต่ปีที่แล้ว พึ่งนึกขึ้นได้ก็เลยเอามาลงให้ได้รับชมกัน ไม่มีคำอธิบายอะไรมากมายหรอกครับ หลักการรวมๆก็คือการป้อนข้อมูลเข้าสู่ตารางกริด โดยบางหลักจะต้องมีการ Validate Cell เพื่อป้อนข้อมูลเฉพาะแบบตัวเลขจำนวนเต็ม หรือจำนวนแบบทศนิยมเท่านั้น จากนั้นก็เอาข้อมูลเหล่านั้นมาทำการพิมพ์ผลลัพธ์ โดยทำการลูปนับจำนวนแถวจากตารางกริดในส่วนของ FetchData และรวมไปถึงการใช้เงื่อนไขในการพิมพ์ลงกระดาษ 2 ขนาด คือ A4 และ A5 ด้วยการใช้รายงานเพียงตัวเดียว ...

มาดูโค้ดส่วนหลักๆในฟอร์ม ...
  1. ' / --------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' / Purpose: Print bill on paper size is A4/A5.
  8. ' / Microsoft Visual Basic .NET (2010) & ActiveReports 6
  9. ' /
  10. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  11. ' / You can modify and/or distribute without to inform the developer.
  12. ' / --------------------------------------------------------------------------------
  13. Public Class frmPrintBillA4A5

  14.     Private Sub frmPrintBillA4A5_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  15.         Me.Dispose()
  16.         Application.Exit()
  17.     End Sub

  18.     Private Sub frmPrintBillA4A5_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  19.         Select Case e.KeyCode
  20.             Case Keys.F7
  21.                 Call btnPreview_Click(sender, e)
  22.             Case Keys.F10
  23.                 Me.Close()
  24.         End Select
  25.     End Sub

  26.     Private Sub frmPrintBillA4A5_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  27.         '// Can use key down.
  28.         Me.KeyPreview = True
  29.         Me.ToolStrip1.Cursor = Cursors.Hand
  30.         '// Sample data.
  31.         txtInvoiceNo.Text = "INV-60080001"
  32.         txtCustomer.Text = "นายบุญห่อ พ่อมันรวย"
  33.         txtCPhone.Text = "08-9999-6666"
  34.         txtSumTotal.Text = "0.00"
  35.         '// Initialized
  36.         Call InitilaizeGrid()
  37.         Call FillDataSample()
  38.         '// Sum of Quantity x UnitPrice.
  39.         Call CalSumTotal()
  40.         '//
  41.     End Sub

  42.     '// Sample Data
  43.     Private Sub FillDataSample()
  44.         Dim row As String() = New String() {"ค่าอุปกรณ์ตัวต้านทาน 2.2K โอห์ม 5%", "20", "50.00", "1000.00"}
  45.         dgvData.Rows.Add(row)
  46.         row = New String() {"ค่าเปิดฝาเครื่อง", "1", "1,000.00", "1,000.00"}
  47.         dgvData.Rows.Add(row)
  48.         row = New String() {"ค่าแรงในการปัดฝุ่น", "1", "3,000.00", "3,000.00"}
  49.         dgvData.Rows.Add(row)
  50.         row = New String() {"ค่าแรงประกอบเครื่องกลับคืน", "1", "5,000.00", "5,000.00"}
  51.         dgvData.Rows.Add(row)
  52.         row = New String() {"ค่าซ่อม", "1", "50.00", "50.00"}
  53.         dgvData.Rows.Add(row)
  54.     End Sub

  55.     ' / --------------------------------------------------------------------------------
  56.     Private Sub InitilaizeGrid()
  57.         '// Create columns with @Run Time
  58.         Dim Column1 As New DataGridViewTextBoxColumn()
  59.         Dim Column2 As New DataGridViewTextBoxColumn()
  60.         Dim Column3 As New DataGridViewTextBoxColumn()
  61.         Dim Column4 As New DataGridViewTextBoxColumn()
  62.         With dgvData
  63.             With Column1
  64.                 .Name = "Description"
  65.                 .HeaderText = "รายละเอียด"
  66.                 .ReadOnly = False
  67.                 .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleLeft
  68.                 .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft
  69.             End With
  70.             With Column2
  71.                 .Name = "Quantity"
  72.                 .HeaderText = "จำนวน"
  73.                 .ValueType = GetType(Integer)
  74.                 .ReadOnly = False
  75.                 .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
  76.                 .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
  77.             End With
  78.             With Column3
  79.                 .Name = "UnitPrice"
  80.                 .HeaderText = "ราคา/หน่วย"
  81.                 .ValueType = GetType(Decimal)
  82.                 .ReadOnly = False
  83.                 .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
  84.                 .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
  85.                 .DefaultCellStyle.Format = "N2"
  86.             End With
  87.             With Column4
  88.                 .Name = "Total"
  89.                 .HeaderText = "รวมเป็นเงิน"
  90.                 .ValueType = GetType(Decimal)
  91.                 .ReadOnly = True
  92.                 .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
  93.                 .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
  94.                 .DefaultCellStyle.Format = "N2"
  95.             End With
  96.             '// Add all columns.
  97.             With dgvData
  98.                 .Columns.Add(Column1)
  99.                 .Columns.Add(Column2)
  100.                 .Columns.Add(Column3)
  101.                 .Columns.Add(Column4)
  102.             End With
  103.         End With
  104.         '// Sample coding with Run-Time
  105.         With dgvData
  106.             .RowHeadersVisible = True
  107.             .AllowUserToAddRows = False
  108.             .AllowUserToDeleteRows = False
  109.             .ReadOnly = False
  110.             .AllowUserToResizeColumns = True
  111.             .AllowUserToResizeRows = True
  112.             .SelectionMode = DataGridViewSelectionMode.CellSelect
  113.             .MultiSelect = False
  114.             '// Data rows
  115.             .Font = New Font("Tahoma", 9)
  116.             .RowTemplate.MinimumHeight = 20
  117.             .RowTemplate.Height = 26
  118.             '// Column Header
  119.             .ColumnHeadersHeight = 30
  120.             .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing
  121.             '// แสดงสีสลับแถวคู่-คี่
  122.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  123.             '// Auto adjust column width.
  124.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  125.             '// Header Own Style
  126.             With .ColumnHeadersDefaultCellStyle
  127.                 .BackColor = Color.Navy
  128.                 .ForeColor = Color.Black
  129.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  130.             End With
  131.         End With
  132.     End Sub

  133.     Private Sub btnPreview_Click(sender As System.Object, e As System.EventArgs) Handles btnPreview.Click
  134.         If dgvData.Rows.Count <= 0 Then Exit Sub
  135.         ' Instance name ARDesigner มันจะชี้ไปที่ไฟล์ arPrintBillA4A5.vb
  136.         Dim rpt As New arPrintBillA4A5
  137.         ' Run Report
  138.         rpt.Run()
  139.         ' โหลดรายงาน document (arPrintBillA4A5) เข้าสู่ ActiveReports Viewer
  140.         '// Zoom 90%
  141.         Me.Viewer1.ReportViewer.Zoom = 0.9
  142.         Me.Viewer1.Document = rpt.Document
  143.     End Sub

  144.     Private Sub dgvData_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellContentClick
  145.         '//
  146.     End Sub

  147.     Private Sub ToolStripButton1_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click
  148.         frmSetting.ShowDialog()
  149.     End Sub

  150.     Private Sub ToolStripButton2_Click(sender As System.Object, e As System.EventArgs) Handles ToolStripButton2.Click
  151.         Me.Close()
  152.     End Sub

  153.     ' / --------------------------------------------------------------------------------
  154.     ' / Add new row
  155.     Private Sub btnAddRow_Click(sender As System.Object, e As System.EventArgs) Handles btnAddRow.Click
  156.         Dim row As String() = New String() {"", 1, 0, 0.0}
  157.         dgvData.Rows.Add(row)
  158.         ' /
  159.         If dgvData.RowCount > 0 Then Call CalSumTotal()
  160.     End Sub

  161.     ' / --------------------------------------------------------------------------------
  162.     ' / Remove selected row
  163.     Private Sub btnRemoveRow_Click(sender As System.Object, e As System.EventArgs) Handles btnRemoveRow.Click
  164.         If dgvData.RowCount = 0 Then Exit Sub
  165.         dgvData.Rows.Remove(dgvData.CurrentRow)
  166.         dgvData.Refresh()
  167.         ' /
  168.         If dgvData.RowCount > 0 Then Call CalSumTotal()
  169.     End Sub

  170.     ' / --------------------------------------------------------------------------------
  171.     ' / Calcualte sum of Total (Column Index = 3)
  172.     Private Sub CalSumTotal()
  173.         txtSumTotal.Text = "0.00"
  174.         For i As Byte = 0 To dgvData.RowCount - 1
  175.             ' CDbl = Convert to Double แปลงค่าตัวเลขเป็นแบบ Double
  176.             txtSumTotal.Text = CDbl(txtSumTotal.Text) + CDbl(dgvData.Rows(i).Cells(3).Value)
  177.         Next
  178.         txtSumTotal.Text = Format(CDbl(txtSumTotal.Text), "#,##0.00")
  179.     End Sub

  180.     ' / --------------------------------------------------------------------------------
  181.     ' / Before Edit Data
  182.     Private Sub dgvData_CellBeginEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellCancelEventArgs) Handles dgvData.CellBeginEdit
  183.         Dim Quantity As Double = dgvData.Rows(e.RowIndex).Cells(1).Value
  184.         Dim UnitPrice As Double = dgvData.Rows(e.RowIndex).Cells(2).Value
  185.         dgvData.Rows(e.RowIndex).Cells(3).Value = (Quantity * UnitPrice).ToString("#,##0.00")
  186.         ' /
  187.         Call CalSumTotal()
  188.     End Sub

  189.     ' / --------------------------------------------------------------------------------
  190.     ' / After you press Enter
  191.     Private Sub dgvData_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellEndEdit
  192.         Dim Quantity As Double
  193.         Dim UnitPrice As Double
  194.         Select Case e.ColumnIndex
  195.             Case 1, 2 ' Column Index = 1 (Quantity), Column Index = 2 (UnitPrice)
  196.                 ' Quantity
  197.                 ' If Null Value
  198.                 If IsDBNull(dgvData.Rows(e.RowIndex).Cells(1).Value) Then dgvData.Rows(e.RowIndex).Cells(1).Value = 0
  199.                 Quantity = dgvData.Rows(e.RowIndex).Cells(1).Value
  200.                 If Quantity = 0 Then
  201.                     dgvData.Rows(e.RowIndex).Cells(1).Value = 1
  202.                 End If

  203.                 ' UnitPrice
  204.                 ' If Null Value
  205.                 If IsDBNull(dgvData.Rows(e.RowIndex).Cells(2).Value) Then dgvData.Rows(e.RowIndex).Cells(2).Value = 0.0
  206.                 UnitPrice = dgvData.Rows(e.RowIndex).Cells(2).Value
  207.                 If UnitPrice = 0 Then
  208.                     dgvData.Rows(e.RowIndex).Cells(2).Value = 0
  209.                 End If
  210.         End Select
  211.         ' Quantity x UnitPrice
  212.         dgvData.Rows(e.RowIndex).Cells(3).Value = (Quantity * UnitPrice).ToString("#,##0.00")
  213.         '//
  214.         Call CalSumTotal()
  215.     End Sub

  216.     ' / --------------------------------------------------------------------------------
  217.     Private Sub dgvData_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvData.EditingControlShowing
  218.         Select Case dgvData.Columns(dgvData.CurrentCell.ColumnIndex).Name
  219.             ' / Can use both ColumeIndex or Field Name
  220.             Case "Quantity", "UnitPrice"
  221.                 '// Stop and Start event handler
  222.                 RemoveHandler e.Control.KeyPress, AddressOf ValidKeyPress
  223.                 AddHandler e.Control.KeyPress, AddressOf ValidKeyPress
  224.         End Select
  225.     End Sub

  226.     ' / --------------------------------------------------------------------------------
  227.     Private Sub ValidKeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs)
  228.         Dim tb As TextBox = sender
  229.         Select Case dgvData.CurrentCell.ColumnIndex
  230.             Case 1  ' Quantity is Integer
  231.                 Select Case e.KeyChar
  232.                     Case "0" To "9"   ' digits 0 - 9 allowed
  233.                     Case ChrW(Keys.Back)    ' backspace allowed for deleting (Delete key automatically overrides)

  234.                     Case Else ' everything else ....
  235.                         ' True = CPU cancel the KeyPress event
  236.                         e.Handled = True ' and it's just like you never pressed a key at all
  237.                 End Select

  238.             Case 2  ' UnitPrice is Double
  239.                 Select Case e.KeyChar
  240.                     Case "0" To "9"
  241.                         ' Allowed "."
  242.                     Case "."
  243.                         ' can present "." only one
  244.                         If InStr(tb.Text, ".") Then e.Handled = True

  245.                     Case ChrW(Keys.Back)

  246.                     Case Else
  247.                         e.Handled = True

  248.                 End Select
  249.         End Select
  250.     End Sub

  251.     Private Sub txtSumTotal_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtSumTotal.KeyPress
  252.         '// Don't press any key.
  253.         e.Handled = True
  254.     End Sub

  255.     Private Sub rdoA5_Click(sender As Object, e As System.EventArgs) Handles rdoA5.Click
  256.         Call btnPreview_Click(sender, e)
  257.     End Sub

  258.     Private Sub rdoA4_Click(sender As Object, e As System.EventArgs) Handles rdoA4.Click
  259.         Call btnPreview_Click(sender, e)
  260.     End Sub

  261. End Class
คัดลอกไปที่คลิปบอร์ด



มาดูโค้ดส่วนของการตั้งค่าและบันทึกผลลงใน INI File ...
  1. ' / --------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' / Purpose: Setting up information.
  8. ' / Microsoft Visual Basic .NET (2010) & MS Excel 2003+
  9. ' /
  10. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  11. ' / You can modify and/or distribute without to inform the developer.
  12. ' / --------------------------------------------------------------------------------
  13. Public Class frmSetting
  14.     Dim strFileINI As String

  15.     Private Sub frmSetting_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  16.         Select Case e.KeyCode
  17.             Case Keys.F8
  18.                 Call btnSave_Click(sender, e)
  19.             Case Keys.Escape
  20.                 Me.Close()
  21.         End Select
  22.     End Sub

  23.     ' / --------------------------------------------------------------------------------
  24.     Private Sub frmSetting_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  25.         '// ตั้งค่าให้ KeyPreView = True เพื่อให้เกิดเหตุการณ์ KeyDown ทำงานได้
  26.         Me.KeyPreview = True
  27.         '//
  28.         strFileINI = MyPath(Application.StartupPath) & "Config.ini"
  29.         '// เช็คว่ามีไฟล์ Config.ini อยู่หรือไม่???
  30.         If My.Computer.FileSystem.FileExists(strFileINI) Then
  31.             txtOwner.Text = ReadIni(strFileINI, "Config", "Owner", "")
  32.             txtAddress.Text = ReadIni(strFileINI, "Config", "Address", "")
  33.             txtRemark1.Text = ReadIni(strFileINI, "Config", "Remark1", "")
  34.             txtRemark2.Text = ReadIni(strFileINI, "Config", "Remark2", "")
  35.             '// กรณีไม่เจอ ให้เริ่มต้นค่าใหม่
  36.         Else
  37.             txtOwner.Text = "ทองก้อนอิเล็กทรอนิกส์ (อดีตช่างในตำนาน)"
  38.             txtAddress.Text = "123/456 ถ.กลางเมือง ต.เมืองเก่า อ.เมือง จ.ขอนแก่น โทร.043-XXX-XXX"
  39.             txtRemark1.Text = "[1] กรุณาตรวจสอบและทดสอบอุปกรณ์ให้ครบถ้วนก่อนออกจากร้าน"
  40.             txtRemark2.Text = "[2] สินค้ารับประกันการซ่อมยาวนาน 7 ชั่วโคตร"
  41.         End If
  42.     End Sub

  43.     ' / --------------------------------------------------------------------------------
  44.     '// บันทึกไฟล์ INI
  45.     Private Sub btnSave_Click(sender As System.Object, e As System.EventArgs) Handles btnSave.Click
  46.         WriteIni(strFileINI, "Config", "Owner", txtOwner.Text)
  47.         WriteIni(strFileINI, "Config", "Address", txtAddress.Text)
  48.         WriteIni(strFileINI, "Config", "Remark1", txtRemark1.Text)
  49.         WriteIni(strFileINI, "Config", "Remark2", txtRemark2.Text)
  50.         '//
  51.         MessageBox.Show("บันทึกการตั้งค่าระบบเรียบร้อย.", "รายงานสถานะ", MessageBoxButtons.OK, MessageBoxIcon.Information)
  52.         Me.Close()
  53.     End Sub

  54.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  55.         Me.Close()
  56.     End Sub

  57.     Private Sub frmSetting_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  58.         Me.Dispose()
  59.     End Sub

  60. End Class
คัดลอกไปที่คลิปบอร์ด


มาดูโค้ดในส่วนของ ActiveReports ...
  1. ' / --------------------------------------------------------------------------------
  2. ' / Developer : Mr.Surapon Yodsanga (Thongkorn Tubtimkrob)
  3. ' / eMail : thongkorn@hotmail.com
  4. ' / URL: http://www.g2gnet.com (Khon Kaen - Thailand)
  5. ' / Facebook: https://www.facebook.com/g2gnet (For Thailand)
  6. ' / Facebook: https://www.facebook.com/commonindy (Worldwide)
  7. ' / Purpose: Print bill on paper size is A4/A5.
  8. ' / Microsoft Visual Basic .NET (2010) & MS Excel 2003+
  9. ' /
  10. ' / This is open source code under @CopyLeft by Thongkorn Tubtimkrob.
  11. ' / You can modify and/or distribute without to inform the developer.
  12. ' / --------------------------------------------------------------------------------
  13. Imports DataDynamics.ActiveReports
  14. Imports DataDynamics.ActiveReports.Document

  15. Public Class arPrintBillA4A5
  16.     ' ตัวแปรนี้ต้องประกาศเป็นแบบ Public (เฉพาะ arPrintBillA4A5) เพื่อให้ส่วนของ Detail1_Format และ FetchData มองเห็นด้วย
  17.     Private ItemNo As Integer
  18.     Private GrandTotal As Double
  19.     '// เลือกจากแถวในตารางกริด
  20.     Private sRow As Integer

  21.     Private Sub arRoomReciept_FetchData(sender As Object, eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) Handles Me.FetchData
  22.         ItemNo += 1
  23.         If ItemNo > frmPrintBillA4A5.dgvData.RowCount Then
  24.             ' หากหมดแล้วก็จบการพิมพ์
  25.             eArgs.EOF = True
  26.             Exit Sub
  27.             ' ยังไม่หมดข้อมูล
  28.         Else
  29.             eArgs.EOF = False
  30.         End If
  31.     End Sub

  32.     Private Sub arRoomReciept_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
  33.         ' การตั้งค่าหน้ากระดาษ
  34.         With PageSettings
  35.             ' หน่วยวัดเป็นนิ้ว
  36.             .Margins.Left = CmToInch(1) ' แปลงค่า 1.0 ซม. เป็นนิ้ว
  37.             .Margins.Right = 0.1
  38.             .Margins.Top = 0.5
  39.             .Margins.Bottom = 0.2
  40.             ' ตั้งค่ากระดาษแนวตั้ง
  41.             .Orientation = PageOrientation.Portrait
  42.             ' กระดาษขนาด A4
  43.             '.PaperKind = Drawing.Printing.PaperKind.A4
  44.             ' กรณีที่กำหนดขนาดกระดาษเอง
  45.             .PaperKind = Drawing.Printing.PaperKind.Custom
  46.             .PaperWidth = CmToInch(21) ' 21 ซม.
  47.             '// เลือกขนาดกระดาษ A5
  48.             If frmPrintBillA4A5.rdoA5.Checked Then
  49.                 .PaperHeight = CmToInch(14.8)
  50.                 '// กระดาษ A4
  51.             Else
  52.                 .PaperHeight = CmToInch(29.5)
  53.             End If
  54.         End With
  55.         ' ปกติต้องเคลียร์ค่าต่างๆของ TextBox ก่อนการพิมพ์
  56.         txtItem.Text = ""
  57.         txtDesc.Text = ""
  58.         txtUnitPrice.Text = ""
  59.         txtQTY.Text = ""
  60.         txtAmount.Text = ""
  61.         txtGrandTotal.Text = ""
  62.         txtOwner.Text = ""
  63.         txtAddress.Text = ""
  64.         lblRemark1.Text = ""
  65.         lblRemark2.Text = ""
  66.         txtDate.Text = ""
  67.         txtInvoiceNo.Text = ""
  68.         '// ตั้งค่าเริ่มต้นในการนับจำนวนหลัก
  69.         ItemNo = 0
  70.         '// แถวเริ่มต้น
  71.         sRow = 0
  72.         '// แสดงกิจการและที่อยู่ โดยการอ่านค่าจาก INI (Initialized File)
  73.         Dim strFileINI As String = MyPath(Application.StartupPath) & "Config.ini"
  74.         If My.Computer.FileSystem.FileExists(strFileINI) Then
  75.             txtOwner.Text = ReadIni(strFileINI, "Config", "Owner", "")
  76.             txtAddress.Text = ReadIni(strFileINI, "Config", "Address", "")
  77.             lblRemark1.Text = ReadIni(strFileINI, "Config", "Remark1", "")
  78.             lblRemark2.Text = ReadIni(strFileINI, "Config", "Remark2", "")
  79.             '// กรณีไม่เจอ ให้เริ่มต้นค่าใหม่
  80.         Else
  81.             txtOwner.Text = "ทองก้อนอิเล็กทรอนิกส์ (อดีตช่างในตำนาน)"
  82.             txtAddress.Text = "123/456 ถ.กลางเมือง ต.เมืองเก่า อ.เมือง จ.ขอนแก่น โทร.043-XXX-XXX"
  83.             lblRemark1.Text = "[1] กรุณาตรวจสอบและทดสอบอุปกรณ์ให้ครบถ้วนก่อนออกจากร้าน"
  84.             lblRemark2.Text = "[2] สินค้ารับประกันการซ่อมยาวนาน 7 ชั่วโคตร"
  85.         End If
  86.     End Sub

  87.     Private Sub Detail1_Format(sender As Object, e As System.EventArgs) Handles Detail1.Format
  88.         '// ItemNo หรือลำดับที่ โดยจะเริ่มจาก 1
  89.         txtItem.Text = ItemNo & "."
  90.         With frmPrintBillA4A5
  91.             '// หลักแรกของ DataGridView
  92.             txtDesc.Text = .dgvData.Rows(sRow).Cells(0).Value
  93.             '// หลักที่ 2
  94.             txtQTY.Text = .dgvData.Rows(sRow).Cells(1).Value
  95.             '// หลักที่ 3
  96.             txtUnitPrice.Text = Format(CDbl(.dgvData.Rows(sRow).Cells(2).Value), "#,##0.00")
  97.             '// จะดึงข้อมูลมาจากหลักที่ 4 ใน DataGridView เลยก็ได้
  98.             txtAmount.Text = Format(CDbl(txtUnitPrice.Text) * CInt(txtQTY.Text), "#,##0.00")
  99.         End With
  100.         ' รวมจำนวนเงินผ่านทางตัวแปร
  101.         GrandTotal = GrandTotal + CDbl(txtAmount.Text)
  102.         '// เลื่อนตำแหน่งแถวการพิมพ์ (ไม่ใช้ตัวแปรนี้ก็ได้ ใช้ ItemNo แทน โดยให้ลดค่า ItemNo - 1)
  103.         '// แต่แยกให้เห็นจะได้ทำความเข้าใจง่ายๆครับผม
  104.         sRow += 1
  105.     End Sub

  106.     Private Sub PageHeader1_Format(sender As Object, e As System.EventArgs) Handles PageHeader1.Format
  107.         txtCname.Text = frmPrintBillA4A5.txtCustomer.Text
  108.         txtCPhone.Text = frmPrintBillA4A5.txtCPhone.Text
  109.         txtInvoiceNo.Text = frmPrintBillA4A5.txtInvoiceNo.Text
  110.         txtDate.Text = FormatDateTime(Now(), DateFormat.GeneralDate)
  111.     End Sub

  112.     Private Sub GroupFooter1_Format(sender As Object, e As System.EventArgs) Handles GroupFooter1.Format
  113.         txtGrandTotal.Text = "รวมเงิน: " & Format(GrandTotal, "#,##0.00") & " บาท."
  114.     End Sub
  115. End Class
คัดลอกไปที่คลิปบอร์ด


มาดูโค้ดในส่วนของโมดูลฟังค์ชั่น ...
  1. Module modFunction

  2.     ' / --------------------------------------------------------------------------------
  3.     ' / Initialized Management
  4.     Private Declare Unicode Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringW" ( _
  5.         ByVal lpApplicationName As String, _
  6.         ByVal lpKeyName As String, _
  7.         ByVal lpString As String, _
  8.         ByVal lpFileName As String _
  9.         ) As Int32

  10.     Private Declare Unicode Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringW" ( _
  11.         ByVal lpApplicationName As String, _
  12.         ByVal lpKeyName As String, _
  13.         ByVal lpDefault As String, _
  14.         ByVal lpReturnedString As String, _
  15.         ByVal nSize As Int32, _
  16.         ByVal lpFileName As String _
  17.         ) As Int32
  18.     ' / --------------------------------------------------------------------------------

  19.     ' / --------------------------------------------------------------------------------
  20.     Public Sub WriteIni(ByVal iniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamVal As String)
  21.         Dim Result As Integer = WritePrivateProfileString(Section, ParamName, ParamVal, iniFileName)
  22.     End Sub

  23.     Public Function ReadIni(ByVal IniFileName As String, ByVal Section As String, ByVal ParamName As String, ByVal ParamDefault As String) As String
  24.         Dim ParamVal As String = Space$(1024)
  25.         Dim LenParamVal As Long = GetPrivateProfileString(Section, ParamName, ParamDefault, ParamVal, Len(ParamVal), IniFileName)
  26.         ReadIni = Left$(ParamVal, LenParamVal)
  27.     End Function

  28.     ' / --------------------------------------------------------------------------------
  29.     ' / Get my project path
  30.     ' / AppPath = C:\My Project\bin\debug
  31.     ' / Replace "\bin\debug" with ""
  32.     ' / Return : C:\My Project\
  33.     Function MyPath(ByVal AppPath As String) As String
  34.         '/ MessageBox.Show(AppPath);
  35.         AppPath = AppPath.ToLower()
  36.         '/ Return Value
  37.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  38.         '// If not found folder then put the \ (BackSlash) at the end.
  39.         If Right(MyPath, 1) <> "" Then MyPath = MyPath & ""
  40.     End Function

  41.     ' / --------------------------------------------------------------------------------
  42.     ' / ฟังค์ชั่นในการป้อนเฉพาะค่าตัวเลขได้เท่านั้น
  43.     Function CheckDigitOnly(ByVal index As Integer) As Boolean
  44.         Select Case index
  45.             Case 48 To 57 ' เลข 0 - 9
  46.                 CheckDigitOnly = False
  47.             Case 8, 13 ' Backspace = 8, Enter = 13
  48.                 CheckDigitOnly = False
  49.             Case Else
  50.                 CheckDigitOnly = True
  51.         End Select
  52.     End Function
  53. End Module
คัดลอกไปที่คลิปบอร์ด

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

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

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

0

กระทู้

51

โพสต์

232

เครดิต

Full Member

Rank: 3Rank: 3

เครดิต
232
โพสต์ 2018-8-22 13:20:20 | ดูโพสต์ทั้งหมด

ขอบพระคุณอย่างสูงครับ อาจารย์
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 21:45 , Processed in 0.228123 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้