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

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

[VB.NET] การประยุกต์ใช้งาน KryptonDataGridView กับการจำลองระบบขายสินค้า

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

319

กระทู้

511

โพสต์

6552

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6552



โค้ดชุดนี้พัฒนาต่อมาจาก การค้นหาข้อมูลจาก DataTable เพื่อนำรายการเข้าสู่ตารางกริด (จำลองการขายสินค้า) แต่เปลี่ยนจาก DataGridView ของ Microsoft มาเป็น KryptonDataGridView ของฟรีแทน เพื่อปรับแต่งให้ทั้งฟอร์มและตารางกริดมีความสวยงามมากยิ่งขึ้น รวมไปถึงใส่การคำนวณภาษีมาให้ครบด้วย ... และมีการแก้ไขโค้ดในส่วนเหตุการณ์ KeyPress ของ DataGridView เพราะเซลล์ของตารางกริด Krypton Toolkit ไม่สามารถรับค่าที่ส่งผ่าน (Cast) มาใส่ไว้ใน TextBox Control แบบไดนามิคได้ ...

ข้อมูลเพิ่มเติม ...
Krypton Toolkit DataGridView for Visual Basic .NET (2010/2022) ... Krypton Toolkit Version 80.24.3.64

คลิปวิดีโอของการสร้างกลุ่มเครื่องมือของ Krypton Toolkit มาใส่ไว้ใน Visual Studio .NET ในกรณีที่ติดตั้งผ่าน NuGet แล้วมันไม่ยอมสร้าง ToolBox ให้อัตโนมัติ

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2017) และ .Net Framework 4.6.2+ (เนื่องจากไฟล์มันใหญ่ เพราะมี .Net Framework มาให้ใช้งานหลายรุ่น) ...

มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Imports Krypton.Toolkit
  2. Public Class frmPosDetail

  3.     Private Sub frmPosDetail_KeyDown(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  4.         Select Case e.KeyCode
  5.             Case Keys.F8
  6.                 '/ Remove Row
  7.                 Call DeleteRow("btnDelRow")
  8.         End Select
  9.     End Sub

  10.     ' / --------------------------------------------------------------------------------
  11.     ' / S T A R T ... H E R E
  12.     ' / --------------------------------------------------------------------------------
  13.     Private Sub frmPosDetail_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  14.         Me.KeyPreview = True  '/ สามารถกดปุ่มฟังค์ชั่นคีย์ลงในฟอร์มได้
  15.         '// ตั้งค่าให้กับ Krypton DataGridView แบบ Run Time
  16.         Call InitializeGrid()
  17.         '// Set all TextBox Control to Zero and ReadOnly except txtSearch.
  18.         For Each tb As TextBox In Me.Controls.OfType(Of TextBox)()
  19.             If tb.Name <> "txtSearch" Then
  20.                 tb.Text = "0.00"
  21.                 tb.ReadOnly = True
  22.             End If
  23.         Next
  24.         With cmbTax
  25.             .Items.Add("ไม่คิดภาษี")
  26.             .Items.Add("รวมภาษีใน (7%)")
  27.             .Items.Add("แยกภาษีนอก (7%)")
  28.         End With
  29.         cmbTax.SelectedIndex = 1    '// Include VAT
  30.         '// กำหนดฟอร์มให้เป็นแบบ Global ขึ้นอยู่กับ Palette ที่เราเลือกจาก ComboBox (cmbPalette)
  31.         Me.PaletteMode = PaletteMode.Global
  32.         '// ลองใช้ KryptonThemeComboBox ดูแล้วมันออกเอ๋อๆเป็นบางครั้ง คือไม่แสดงผลข้อมูลออกมา ก็เลยใช้แบบ Manual เอานี่แหละครับ
  33.         With cmbPalette
  34.             .Items.Add("ProfessionalSystem")
  35.             .Items.Add("ProfessionalOffice2003")
  36.             .Items.Add("Office2007DarkGray")
  37.             .Items.Add("Office2007Blue")
  38.             .Items.Add("Office2007BlueDarkMode")
  39.             .Items.Add("Office2007BlueLightMode")
  40.             .Items.Add("Office2007Silver")
  41.             .Items.Add("Office2007SilverDarkMode")
  42.             .Items.Add("Office2007SilverLightMode")
  43.             .Items.Add("Office2007White")
  44.             .Items.Add("Office2007Black")
  45.             .Items.Add("Office2007BlackDarkMode")
  46.             .Items.Add("Office2010DarkGray")
  47.             .Items.Add("Office2010Blue")
  48.             .Items.Add("Office2010BlueDarkMode")
  49.             .Items.Add("Office2010BlueLightMode")
  50.             .Items.Add("Office2010Silver")
  51.             .Items.Add("Office2010SilverDarkMode")
  52.             .Items.Add("Office2010SilverLightMode")
  53.             .Items.Add("Office2010White")
  54.             .Items.Add("Office2010Black")
  55.             .Items.Add("Office2010BlackDarkMode")
  56.             .Items.Add("Office2013DarkGray")
  57.             .Items.Add("Office2013LightGray")
  58.             .Items.Add("Office2013White")
  59.         End With
  60.         With cmbPalette
  61.             .SelectedIndex = 19
  62.             .ItemHeight = 10
  63.             .IntegralHeight = False
  64.         End With
  65.         '// ตัวอย่างหากต้องการเลือก Palette Mode ให้กับ Krypton DataGridView โดยเฉพาะ
  66.         'dgvData.PaletteMode = Krypton.Toolkit.PaletteMode.Office2010Silver
  67.     End Sub

  68.     ' / --------------------------------------------------------------------------------------------
  69.     ' / Change Palette Mode.
  70.     ' / --------------------------------------------------------------------------------------------
  71.     Private Sub cmbPalette_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbPalette.SelectedIndexChanged
  72.         Dim manager As New KryptonManager()
  73.         Select Case cmbPalette.SelectedIndex
  74.             Case 0
  75.                 manager.GlobalPaletteMode = PaletteMode.ProfessionalSystem
  76.             Case 1
  77.                 manager.GlobalPaletteMode = PaletteMode.ProfessionalOffice2003
  78.             Case 2
  79.                 manager.GlobalPaletteMode = PaletteMode.Office2007DarkGray
  80.             Case 3
  81.                 manager.GlobalPaletteMode = PaletteMode.Office2007Blue
  82.             Case 4
  83.                 manager.GlobalPaletteMode = PaletteMode.Office2007BlueDarkMode
  84.             Case 5
  85.                 manager.GlobalPaletteMode = PaletteMode.Office2007BlueLightMode
  86.             Case 6
  87.                 manager.GlobalPaletteMode = PaletteMode.Office2007Silver
  88.             Case 7
  89.                 manager.GlobalPaletteMode = PaletteMode.Office2007SilverDarkMode
  90.             Case 8
  91.                 manager.GlobalPaletteMode = PaletteMode.Office2007SilverLightMode
  92.             Case 9
  93.                 manager.GlobalPaletteMode = PaletteMode.Office2007White
  94.             Case 10
  95.                 manager.GlobalPaletteMode = PaletteMode.Office2007Black
  96.             Case 11
  97.                 manager.GlobalPaletteMode = PaletteMode.Office2007BlackDarkMode
  98.             Case 12
  99.                 manager.GlobalPaletteMode = PaletteMode.Office2010DarkGray
  100.             Case 13
  101.                 manager.GlobalPaletteMode = PaletteMode.Office2010Blue
  102.             Case 14
  103.                 manager.GlobalPaletteMode = PaletteMode.Office2010BlueDarkMode
  104.             Case 15
  105.                 manager.GlobalPaletteMode = PaletteMode.Office2010BlueLightMode
  106.             Case 16
  107.                 manager.GlobalPaletteMode = PaletteMode.Office2010Silver
  108.             Case 17
  109.                 manager.GlobalPaletteMode = PaletteMode.Office2010SilverDarkMode
  110.             Case 18
  111.                 manager.GlobalPaletteMode = PaletteMode.Office2010SilverLightMode
  112.             Case 19
  113.                 manager.GlobalPaletteMode = PaletteMode.Office2010White
  114.             Case 20
  115.                 manager.GlobalPaletteMode = PaletteMode.Office2010Black
  116.             Case 21
  117.                 manager.GlobalPaletteMode = PaletteMode.Office2010BlackDarkMode
  118.             Case 22
  119.                 manager.GlobalPaletteMode = PaletteMode.Office2013DarkGray
  120.             Case 23
  121.                 manager.GlobalPaletteMode = PaletteMode.Office2013LightGray
  122.             Case 24
  123.                 manager.GlobalPaletteMode = PaletteMode.Office2013White
  124.         End Select
  125.         txtSearch.Focus()
  126.     End Sub

  127.     ' / --------------------------------------------------------------------------------
  128.     ' / S A M P L E ... D A T A T A B L E (Products)
  129.     ' / --------------------------------------------------------------------------------
  130.     Function GetDataTable() As DataTable
  131.         '// Add Column
  132.         Dim DT As New DataTable
  133.         With DT.Columns
  134.             .Add("ProductPK", GetType(Integer)) '<< Index = 0
  135.             .Add("ProductID", GetType(String))    '<< 1
  136.             .Add("ProductName", GetType(String)) '<< 2
  137.             .Add("UnitPrice", GetType(Double)) '<< 3
  138.             '// ในส่วนของการรวมจำนวนเงิน (Total) จำนวน X ราคา เราจะไม่เก็บในฐานข้อมูลให้เปลืองพื้นที่ แต่จะให้โปรแกรมคำนวณให้แทน
  139.         End With
  140.         '// ... Add rows for data.
  141.         '/ ProductPK, ProductID, ProductName, UnitPrice
  142.         '/ เหมือนการ Query เพื่อนำเอาเฉพาะข้อมูลที่ต้องการมาใช้งานเท่านั้น
  143.         With DT.Rows
  144.             .Add(1, "01", "กาแฟร้อน", "100.00")
  145.             .Add(2, "02", "กาแฟเย็น", "60.00")
  146.             .Add(3, "03", "คาปูชิโน่", "75.00")
  147.             .Add(4, "04", "คาปูชิโน่ - ลาเต้", "80.00")
  148.             .Add(5, "05", "เอ็กซ์เพรสโซ่", "90.00")
  149.             .Add(6, "06", "Classic Chicken", "20.00")
  150.             .Add(7, "07", "Mexicana", "25.00")
  151.             .Add(8, "08", "Lemon Shrimp", "30.00")
  152.             .Add(9, "09", "Bacon", "40.00")
  153.             .Add(10, "10", "Spicy Shrimp", "45.00")
  154.             .Add(11, "11", "Tex Supreme", "50.00")
  155.             .Add(12, "12", "Fish", "55.00")
  156.             .Add(13, "13", "Pepsi Can", "20.00")
  157.             .Add(14, "14", "Coke Can", "20.00")
  158.             .Add(15, "15", "7Up Can", "20.00")
  159.             .Add(16, "16", "Pepsi 2 ลิตร", "50.00")
  160.             .Add(17, "17", "Coke 2 ลิตร", "50.00")
  161.             .Add(18, "18", "น้ำเปล่า", "15.00")
  162.             .Add(20, "19", "เบียร์สิงห์ (กระป๋อง)", "50.00")
  163.             .Add(21, "20", "น้ำเย็น", "20.00")
  164.             .Add(19, "21", "เหล้าขาว (เป็ก)", "100.00")
  165.             .Add(22, "22", "เหล้าขาว (กลม)", "1,000.00")
  166.         End With
  167.         Return DT
  168.     End Function

  169.     ' / -------------------------------------------------------------------------------------
  170.     ' / ตั้งค่าเริ่มต้นให้กับ Krypton DataGridView แบบ Run Time (ใช้โค้ดทั้งหมด)
  171.     ' / -------------------------------------------------------------------------------------
  172.     Private Sub InitializeGrid()
  173.         With dgvData
  174.             .RowHeadersVisible = False
  175.             .AllowUserToAddRows = False
  176.             .AllowUserToDeleteRows = False
  177.             .AllowUserToResizeRows = False
  178.             .MultiSelect = False
  179.             '// Need to modify each cell.
  180.             .SelectionMode = DataGridViewSelectionMode.CellSelect
  181.             .ReadOnly = False
  182.             '// Automatically set the width.
  183.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  184.             '// Font for RowTemplate.
  185.             .RowTemplate.DefaultCellStyle.Font = New Font("Tahoma", 11, FontStyle.Regular)
  186.             .RowTemplate.MinimumHeight = 32
  187.             '// Header.
  188.             .ColumnHeadersDefaultCellStyle.Font = New Font("Tahoma", 11, FontStyle.Bold)
  189.             '// Show alternating colors in even and odd rows.
  190.             .AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
  191.             '// Set ColumnHeadersHeightSizeMode before adjusting row heights.
  192.             .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
  193.             .ColumnHeadersHeight = 36
  194.             '// GridStyles
  195.             '.GridStyles.Style = DataGridViewStyle.List
  196.             .GridStyles.Style = DataGridViewStyle.Mixed
  197.             '.GridStyles.Style = DataGridViewStyle.Sheet
  198.             .BorderStyle = BorderStyle.Fixed3D

  199.             '// Declare Krypton DataGridView columns type.
  200.             Dim PK As New KryptonDataGridViewTextBoxColumn()
  201.             Dim ProductID As New KryptonDataGridViewTextBoxColumn()
  202.             Dim ProductName As New KryptonDataGridViewTextBoxColumn()
  203.             Dim Quantity As New KryptonDataGridViewTextBoxColumn()
  204.             Dim UnitPrice As New KryptonDataGridViewTextBoxColumn()
  205.             Dim Total As New KryptonDataGridViewTextBoxColumn()
  206.             '// Add new Columns.
  207.             dgvData.Columns.AddRange(New DataGridViewColumn() {
  208.                                      PK, ProductID, ProductName, Quantity, UnitPrice, Total
  209.                                     })
  210.             '/ Index = 0
  211.             With PK
  212.                 .Name = "PK"
  213.                 .HeaderText = "PK"
  214.                 .Visible = False
  215.             End With
  216.             '/ Index = 1
  217.             With ProductID
  218.                 .Name = "ProductID"
  219.                 .HeaderText = "รหัสสินค้า"
  220.                 .ReadOnly = True
  221.             End With
  222.             '/ Index = 2
  223.             With ProductName
  224.                 .Name = "ProductName"
  225.                 .HeaderText = "ชื่อสินค้า"
  226.                 .ReadOnly = True
  227.             End With
  228.             '/ Index = 3
  229.             With Quantity
  230.                 .Name = "Quantity"
  231.                 .HeaderText = "จำนวน"
  232.                 .DefaultCellStyle.Format = "0"
  233.             End With
  234.             '/ Index = 4
  235.             With UnitPrice
  236.                 .Name = "UnitPrice"
  237.                 .HeaderText = "ราคาต่อหน่วย"
  238.                 .DefaultCellStyle.Format = "0.00"
  239.             End With
  240.             '/ Index = 5
  241.             With Total
  242.                 .Name = "Total"
  243.                 .HeaderText = "รวมเงิน"
  244.                 .DefaultCellStyle.Format = "0.00"
  245.                 .ReadOnly = True
  246.             End With
  247.             '// เพิ่มปุ่มลบ (Index = 6)
  248.             Dim btnDelRow As New KryptonDataGridViewButtonColumn()
  249.             dgvData.Columns.Add(btnDelRow)
  250.             With btnDelRow
  251.                 .HeaderText = "ลบ-F8"
  252.                 .Text = "ลบ"
  253.                 .UseColumnTextForButtonValue = True
  254.                 .Width = 80
  255.                 '.ButtonStyle = ButtonStyle.ButtonSpec
  256.                 .SortMode = DataGridViewColumnSortMode.NotSortable  '/ Not sort order but can click header for delete row.
  257.                 .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  258.                 .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
  259.             End With
  260.             '/ Alignment MiddleRight only columns 3 to 5.
  261.             For i As Byte = 3 To 5
  262.                 .Columns(i).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight '/ Header Alignment
  263.                 .Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight '/ Cell Alignment
  264.             Next
  265.         End With
  266.     End Sub

  267.     ' / --------------------------------------------------------------------------------
  268.     ' / การค้นหาข้อมูลในช่อง TextBox และค้นหาว่ามีข้อมูลรายการสินค้าอยู่ในแถวรายการตารางกริดหรือไม่
  269.     ' / หากไม่มี ก็ให้เพิ่มแถวเข้าไปใหม่
  270.     ' / หากมี ก็ให้เพิ่มจำนวนขึ้นไปอีก 1 Unit.
  271.     ' / --------------------------------------------------------------------------------
  272.     Private Sub txtSearch_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtSearch.KeyPress
  273.         '// เมื่อกดคีย์ ENTER เพื่อเริ่มต้นการค้นหาข้อมูล
  274.         If e.KeyChar = Chr(13) Then
  275.             '/ Replace some word for reserved in DataBase.
  276.             txtSearch.Text = txtSearch.Text.Trim.Replace("'", "").Replace("*", "").Replace("%", "")
  277.             e.Handled = True    '// ปิดเสียง
  278.             '/ สร้าง DataTable สมมุติขึ้นมา (เหมือนกับการดึงข้อมูลจาก DataBase เข้ามาเพื่อทำการค้นหา)
  279.             Dim DT As DataTable = GetDataTable()
  280.             '/ ค้นหาข้อมูลจาก DataTable แล้วรับค่ามาใส่ไว้ใน DataRow
  281.             '/ การค้นหาข้อมูลแบบ String จะต้องใส่เครื่องหมาย Single Quote ครอบเอาไว้ เช่น ProductID = '01'
  282.             Dim r() As DataRow = DT.Select(" ProductID = " & "'" & txtSearch.Text.Trim & "'")
  283.             '/ ตัวแปรบูลีน Flag แจ้งการค้นหาข้อมูลในตารางกริด (True = พบรายการในแถว, False = ไม่พบ)
  284.             Dim blnExist As Boolean = False
  285.             '// หากพบข้อมูลใน DataTable
  286.             If r.Count > 0 Then
  287.                 '/ ต้องค้นหาข้อมูลจากตารางกริดก่อน เพื่อค้นหาว่ามีรายการสินค้าเดิมหรือไม่?
  288.                 '/ หากในตารางกริดยังไม่มีแถวรายการ ก็จะข้าม For Loop นี้ไปเพิ่มรายการใหม่ทันที
  289.                 For iRow As Integer = 0 To dgvData.RowCount - 1
  290.                     '/ ทดสอบด้วย Primary Key r(0).Item(0) หรือ Product ID r(0).Item(1) ก็ได้
  291.                     If r(0).Item(0) = dgvData.Rows(iRow).Cells(0).Value Then
  292.                         '/ เมื่อพบรายการเดิม ก็ให้เพิ่มจำนวนขึ้น 1
  293.                         dgvData.Rows(iRow).Cells(3).Value += 1
  294.                         '/ Flag แจ้งว่าพบข้อมูลเดิมแล้ว
  295.                         blnExist = True
  296.                         '/ เมื่อเจอสินค้าเดิมในตารางกริดแล้ว ไม่ว่าจะอยู่แถวลำดับที่เท่าไหร่ ก็ให้ออกจาก For Loop การค้นหาได้เลย
  297.                         '/ เพราะรายการสินค้าใดๆ จะต้องมีอยู่เพียงแค่รายการเดียว ไม่ต้องเสียเวลาวนรอบกลับไปทำให้จนครบจำนวนแถว
  298.                         Exit For
  299.                     End If
  300.                 Next
  301.                 '/ กรณีที่พบสินค้าในตารางกริด กำหนด blnExist = True ทำให้ Not True = False จะทำให้ข้ามเงื่อนไขนี้ออกไป
  302.                 '/ กรณีที่ไม่พบข้อมูลสินค้าเดิมในตารางกริด กำหนด blnExist = False ทำให้ Not False = True เพิ่มรายการสินค้าแถวใหม่เข้าไปในตารางกริดได้
  303.                 If Not blnExist Then
  304.                     '/ เขียนเอาไว้หน่อยจะได้ไม่ลืมว่าแต่ละหลักเราเก็บค่าอะไร
  305.                     '/ Primary Key, Product ID, Product Name, Quantity, UnitPrice, Total
  306.                     dgvData.Rows.Add(r(0).Item(0), r(0).Item(1), r(0).Item(2), "1", Format(CDbl(r(0).Item(3).ToString), "0.00"), "0.00")
  307.                 End If
  308.                 '/ หากไม่ใช้ NOT ก็จะต้องเขียนโปรแกรมแบบนี้ แต่โค้ดจะไม่สวยงาม
  309.                 '/ If blnExist = True Then
  310.                 '/     ไม่ต้องทำอะไร
  311.                 '/ Else
  312.                 '/     ทำคำสั่งเพิ่มรายการแถว
  313.                 '/ End If
  314.                 DT.Dispose()
  315.                 '// คำนวณผลรวมใหม่
  316.                 Call CalSumTotal()
  317.             End If
  318.             txtSearch.Clear()
  319.             txtSearch.Focus()
  320.         End If
  321.     End Sub

  322.     ' / --------------------------------------------------------------------------------
  323.     ' / Calcualte sum of Total (Column Index = 5)
  324.     ' / ทำทุกครั้งที่มีการเพิ่ม/ลบแถวรายการ หรือมีการเปลี่ยนแปลงค่าในเซลล์ Quantity, UnitPrice
  325.     ' / เพื่อคำนวณหาจำนวนเงินใหม่
  326.     ' / --------------------------------------------------------------------------------
  327.     Private Sub CalSumTotal()
  328.         txtTotal.Text = "0.00"
  329.         '/ วนรอบตามจำนวนแถวที่มีอยู่ปัจจุบัน
  330.         For i As Integer = 0 To dgvData.RowCount - 1
  331.             '/ หลักสุดท้ายของตารางกริด = [จำนวน x ราคา]
  332.             dgvData.Rows(i).Cells(5).Value = Format(dgvData.Rows(i).Cells(3).Value * dgvData.Rows(i).Cells(4).Value, "#,##0.00")
  333.             '/ นำค่าจาก Total มารวมกันเพื่อแสดงผลในสรุปผลรวม (x = x + y)
  334.             txtTotal.Text = Format(CDbl(txtTotal.Text) + CDbl(dgvData.Rows(i).Cells(5).Value), "#,##0.00")
  335.         Next
  336.         '// TAX - การคิดภาษี
  337.         Dim SumPrice As Double = CDbl(txtTotal.Text)
  338.         Select Case cmbTax.SelectedIndex
  339.             '// ไม่คิดภาษี
  340.             Case 0
  341.                 txtTotal.Text = Format(SumPrice, "#,##0.00")
  342.                 txtVat.Text = "0.00"
  343.                 '// รวมจำนวนเงินทั้งหมด
  344.                 txtNetTotal.Text = Format(CDbl(txtTotal.Text), "#,##0.00")
  345.                 '// หรือ txtNetTotal.Text = Format(SumPrice, "#,##0.00")

  346.                 '// รวมภาษี (Include Tax)
  347.             Case 1
  348.                 '// คิดภาษี 7%
  349.                 txtVat.Text = Format(SumPrice - (SumPrice / 1.07), "#,##0.00")
  350.                 '// หาราคาสินค้าที่แท้จริงก่อน ... โดยเอาราคาสินค้าทั้งหมดลบออกจากภาษี
  351.                 txtTotal.Text = Format(SumPrice - CDbl(txtVat.Text), "#,##0.00")
  352.                 '// รวมจำนวนเงินทั้งหมด
  353.                 txtNetTotal.Text = Format(SumPrice, "#,##0.00")

  354.                 '// แยกภาษี (Exclude Tax)
  355.             Case 2
  356.                 txtTotal.Text = Format(SumPrice, "#,##0.00")
  357.                 '// คิดแยกภาษี 7%
  358.                 txtVat.Text = Format(CDbl(txtTotal.Text) * 7 / 100, "#,##0.00")
  359.                 '// รวมจำนวนเงินทั้งหมด + ภาษี
  360.                 txtNetTotal.Text = Format(CDbl(txtTotal.Text) + CDbl(txtVat.Text), "#,##0.00")
  361.         End Select
  362.     End Sub

  363.     ' / --------------------------------------------------------------------------------
  364.     ' / โปรแกรมย่อยในการลบแถวรายการที่เลือกออกไป
  365.     ' / --------------------------------------------------------------------------------
  366.     Private Sub DeleteRow(ByVal ColName As String)
  367.         If dgvData.RowCount = 0 Then Return
  368.         '/ ColName เป็นชื่อของหลัก Index = 6 ของตารางกริด (ไปดูที่โปรแกรมย่อย InitializeGrid)
  369.         If ColName = "btnDelRow" Then
  370.             '// ลบรายการแถวที่เลือกออกไป
  371.             dgvData.Rows.Remove(dgvData.CurrentRow)
  372.             '/ เมื่อแถวรายการถูกลบออกไป ต้องไปคำนวณหาค่าผลรวมใหม่
  373.             Call CalSumTotal()
  374.         End If
  375.         txtSearch.Focus()
  376.     End Sub

  377.     Private Sub dgvData_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellClick
  378.         Select Case e.ColumnIndex
  379.             '// Delete Button
  380.             Case 6
  381.                 'MsgBox(("Row : " + e.RowIndex.ToString & "  Col : ") + e.ColumnIndex.ToString)
  382.                 Call DeleteRow("btnDelRow")
  383.         End Select
  384.     End Sub

  385.     ' / --------------------------------------------------------------------------------
  386.     ' / เหตุการณ์นี้จะเกิดขึ้นเมื่อแก้ไขรายการในเซลล์เรียบร้อยแล้วกด Enter
  387.     ' / --------------------------------------------------------------------------------
  388.     Private Sub dgvData_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellEndEdit
  389.         '/ เกิดการเปลี่ยนแปลงค่าในหลัก Index ที่ 3 หรือ 4
  390.         '/ ให้คำนวณราคารวมใหม่ จำนวน X ราคา
  391.         Select Case e.ColumnIndex
  392.             '/ Column Index = 3 (Quantity), Column Index = 4 (UnitPrice)
  393.             Case 3, 4
  394.                 '/ Quantity
  395.                 '/ การดัก Error กรณีไม่มีค่าอะไรในเซลล์ ให้ใส่ค่า 0 ลงไปแทน (จริงๆกรณีจำนวนสินค้าต้องกำหนดขั้นต่ำไว้ที่ 1)
  396.                 If dgvData.Rows(e.RowIndex).Cells(3).Value Is Nothing OrElse dgvData.Rows(e.RowIndex).Cells(3).Value.ToString() = "" Then dgvData.Rows(e.RowIndex).Cells(3).Value = "0"
  397.                 Dim Quantity As Integer = dgvData.Rows(e.RowIndex).Cells(3).Value
  398.                 '/ UnitPrice
  399.                 If dgvData.Rows(e.RowIndex).Cells(4).Value Is Nothing OrElse dgvData.Rows(e.RowIndex).Cells(4).Value.ToString() = "" Then dgvData.Rows(e.RowIndex).Cells(4).Value = "0.00"
  400.                 Dim UnitPrice As Double = dgvData.Rows(e.RowIndex).Cells(4).Value
  401.                 dgvData.Rows(e.RowIndex).Cells(4).Value = Format(CDbl(dgvData.Rows(e.RowIndex).Cells(4).Value), "0.00")

  402.                 '/ Quantity x UnitPrice
  403.                 dgvData.Rows(e.RowIndex).Cells(5).Value = CDbl((Quantity * UnitPrice).ToString("#,##0.00"))
  404.                 '/ Calculate Summary
  405.                 Call CalSumTotal()
  406.         End Select
  407.     End Sub

  408.     ' / --------------------------------------------------------------------------------
  409.     ' / เมื่อเริ่มกดคีย์ในหลักที่ 3 และ 4 (Quantity-Integer, UnitPrice-Double)
  410.     ' / --------------------------------------------------------------------------------
  411.     Private Sub dgvData_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles dgvData.EditingControlShowing
  412.         '// Or use the index columns of DataGridView.
  413.         'Select Case dgvData.Columns(dgvData.CurrentCell.ColumnIndex).Index
  414.         '    Case 1
  415.         '
  416.         'End Select

  417.         '// Don't forget to specify the Column Name earlier as well (InitializeGrid sub program).
  418.         Select Case dgvData.Columns(dgvData.CurrentCell.ColumnIndex).Name
  419.         '// อย่าลืมกำหนดชื่อ Column Name มาก่อนหน้านี้ด้วย (โปรแกรมย่อย InitializeGrid)
  420.             Case "Quantity", "UnitPrice"
  421.                 If TypeOf e.Control Is Krypton.Toolkit.KryptonDataGridViewTextBoxEditingControl Then
  422.                     Dim editingControl As Krypton.Toolkit.KryptonDataGridViewTextBoxEditingControl = TryCast(e.Control, Krypton.Toolkit.KryptonDataGridViewTextBoxEditingControl)
  423.                     '// Event Handler for intercepts keystrokes.
  424.                     AddHandler editingControl.KeyPress, AddressOf KryptonDataGridViewKeyPress
  425.                 End If
  426.         End Select
  427.     End Sub

  428.     ' / --------------------------------------------------------------------------------
  429.     ' / ดักค่าการกดคีย์เฉพาะตัวเลขในเซลล์เท่านั้น
  430.     ' / --------------------------------------------------------------------------------
  431.     Private Sub KryptonDataGridViewKeyPress(sender As Object, e As KeyPressEventArgs)
  432.         Select Case dgvData.CurrentCell.ColumnIndex
  433.             Case 3   '// Quantity is Integer (กรณีเลขจำนวนเต็ม)
  434.                 '// Allow numeric digits (0-9) in the TextBox.
  435.                 If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) Then e.Handled = True

  436.             Case 4  '// UnitPrice is Double (กรณีเลขจำนวนทศนิยม)
  437.                 '// Allow numeric digits (0-9) and the decimal point (.) only one in the TextBox.
  438.                 If Not Char.IsControl(e.KeyChar) AndAlso Not Char.IsDigit(e.KeyChar) AndAlso e.KeyChar <> "." Then e.Handled = True
  439.                 '// Check for an existing decimal point in the cell.
  440.                 Dim tb As KryptonDataGridViewTextBoxEditingControl = DirectCast(sender, KryptonDataGridViewTextBoxEditingControl)
  441.                 If e.KeyChar = "." AndAlso tb.Text.Contains(".") Then e.Handled = True
  442.         End Select
  443.     End Sub

  444.     ' / --------------------------------------------------------------------------------
  445.     ' / เลือกการคำนวณภาษี
  446.     ' / --------------------------------------------------------------------------------
  447.     Private Sub cmbTax_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cmbTax.SelectedIndexChanged
  448.         Call CalSumTotal()
  449.         txtSearch.Focus()
  450.     End Sub

  451.     Private Sub frmPosDetail_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  452.         Me.Dispose()
  453.         GC.SuppressFinalize(Me)
  454.         Application.Exit()
  455.     End Sub

  456.     Private Sub btnExit_Click(sender As System.Object, e As System.EventArgs) Handles btnExit.Click
  457.         Me.Close()
  458.     End Sub
  459. End Class
คัดลอกไปที่คลิปบอร์ด

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

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

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

GMT+7, 2024-11-14 18:01 , Processed in 0.196621 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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