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

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

[VB.NET] การค้นหาข้อมูลจาก DataTable เพื่อนำรายการเข้าสู่ตารางกริด (จำลองการขายสินค้า)

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

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
5973



โค้ดชุดนี้เสมือนจำลองการทำรายการขายสินค้า แต่ยังไม่มีการเชื่อมต่อกับฐานข้อมูลใดๆ โดยอาศัย DataTable เป็นตารางข้อมูลสมมุติ เพื่อจะได้ไม่พะวงในเรื่องระบบฐานข้อมูลมากเกินไป แต่ให้โฟกัสมาที่ วิธีการคิด และกระบวนการขั้นตอนของการค้นหารายการสินค้า (Flow Control) เพื่อที่จะนำมันมาใส่ไว้ในตารางกริด (DataGridView) โดยยึดตามหลักความเป็นจริงคือ ผู้ใช้งานจะยิงรหัสบาร์โค้ด (ยาวหลายหลัก) จากนั้นเครื่องอ่านจะส่งรหัส ASCII 13 หรือ Enter เพื่อไปทำการค้นหาข้อมูล แต่ในการทดสอบเราจะป้อนตัวเลข 01 - 15 ตามด้วย Enter แทน เพื่อให้ง่ายและรวดเร็ว

การค้นหาข้อมูล หากพบข้อมูลที่อยู่ในตารางข้อมูล (DataTable) ต่อไปคือต้องวนรอบค้นหาข้อมูลรายการสินค้าที่ต้องการในตารางกริดเสียก่อน หากเจอข้อมูล ก็กำหนดให้จำนวนสินค้าในแถวนั้นๆ เพิ่มขึ้นอีก 1 และกำหนด Flag (หรือ Boolean) บอกให้รู้ว่าเจอแล้ว จะได้ไม่ต้องไปเพิ่มรายการแถวสินค้าเข้าไปใหม่ และกระโดดออกจากการวนรอบในตารางกริด ... พอวนรอบแถวในตารางกริดจนหมด หากหาไม่เจอ ก็ต้องสร้างรายการแถวสินค้าตัวใหม่เข้ามาในตารางกริด โดยอาศัย Flag จากที่กำหนดไว้ก่อนหน้าเป็นเงื่อนไข ... การที่จะทำความเข้าใจในวิธีการขั้นตอนนี้ได้ดี คุณจะต้องนำ Debugger เข้ามาช่วยเหลือด้วยครับ

โค้ดในส่วนของการค้นหาข้อมูล ...
  1.     ' / --------------------------------------------------------------------------------
  2.     ' / การค้นหาข้อมูลในช่อง TextBox
  3.     Private Sub txtSearch_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtSearch.KeyPress
  4.         '// เมื่อกดคีย์ ENTER เพื่อเริ่มต้นการค้นหาข้อมูล
  5.         If e.KeyChar = Chr(13) Then
  6.             e.Handled = True    '// ปิดเสียง
  7.             '/ สร้าง DataTable สมมุติขึ้นมา
  8.             Dim DT As DataTable = GetDataTable()
  9.             '/ ค้นหาข้อมูลจาก DataTable แล้วรับค่ามาใส่ไว้ใน DataRow
  10.             '/ การค้นหาข้อมูลแบบ String จะต้องใส่เครื่องหมาย Single Quote ครอบเอาไว้ เช่น ProductID = '01'
  11.             Dim r() As DataRow = DT.Select(" ProductID = " & "'" & txtSearch.Text.Trim & "'")
  12.             '// หากพบข้อมูลใน DataTable
  13.             If r.Count > 0 Then
  14.                 '/ ตัวแปรบูลีน Flag แจ้งการค้นหาข้อมูลในตารางกริด (True = พบรายการในแถว, False = ไม่พบ)
  15.                 Dim blnExist As Boolean = False
  16.                 '/ ต้องค้นหาข้อมูลจากตารางกริดก่อน เพื่อค้นหาว่ามีรายการสินค้าเดิมหรือไม่?
  17.                 '/ หากในตารางกริดยังไม่มีแถวรายการ ก็จะข้าม For Loop นี้ไปเพิ่มรายการใหม่ทันที (ครั้งแรกที่ยังไม่มีข้อมูลในตารางกริด)
  18.                 For iRow As Integer = 0 To dgvData.RowCount - 1
  19.                     '/ ทดสอบด้วย Primary Key r(0).Item(0) หรือ Product ID r(0).Item(1) ก็ได้
  20.                     If r(0).Item(0) = dgvData.Rows(iRow).Cells(0).Value Then
  21.                         '/ เมื่อพบรายการเดิม ก็ให้เพิ่มจำนวนขึ้น 1
  22.                         dgvData.Rows(iRow).Cells(3).Value += 1
  23.                         lblLastPrice.Text = "Last Price: " & CDbl(dgvData.Rows(iRow).Cells(4).Value).ToString("0.00")
  24.                         '/ Flag แจ้งว่าพบข้อมูลเดิมแล้ว
  25.                         blnExist = True
  26.                         '/ เมื่อเจอสินค้าเดิมในตารางกริดแล้ว ไม่ว่าจะอยู่แถวลำดับที่เท่าไหร่ ก็ให้ออกจาก For Loop การค้นหาได้เลย
  27.                         '/ เพราะรายการสินค้าใดๆ จะต้องมีอยู่เพียงแค่รายการเดียว ไม่ต้องเสียเวลาวนรอบกลับไปทำให้จนครบจำนวนแถว
  28.                         Exit For
  29.                     End If
  30.                 Next
  31.                 '/ กรณีที่พบสินค้าในตารางกริด กำหนด blnExist = True ทำให้ Not True = False จะทำให้ข้ามเงื่อนไขนี้ออกไป
  32.                 '/ กรณีที่ไม่พบข้อมูลสินค้าเดิมในตารางกริด กำหนด blnExist = False ทำให้ Not False = True เพิ่มรายการสินค้าแถวใหม่เข้าไปในตารางกริดได้
  33.                 If Not blnExist Then
  34.                     '/ Primary Key, Product ID, Product Name, Quantity, UnitPrice, Total
  35.                     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")
  36.                     lblLastPrice.Text = "Last Price: " & CDbl(r(0).Item(3)).ToString("0.00")
  37.                 End If
  38.                 '/ หากไม่ใช้ NOT ก็จะต้องเขียนโปรแกรมแบบนี้
  39.                 '/ If blnExist = True Then
  40.                 '/     ไม่ต้องทำอะไร
  41.                 '/ Else
  42.                 '/     ทำคำสั่งเพิ่มรายการ
  43.                 '/ End If
  44.                 '// คำนวณผลรวมใหม่
  45.                 Call CalSumTotal()
  46.                 DT.Dispose()
  47.             End If
  48.             txtSearch.Clear()
  49.             txtSearch.Focus()
  50.         End If
  51.     End Sub
คัดลอกไปที่คลิปบอร์ด

มาดูโค้ดฉบับเต็มกันเถอะ ...
  1. Public Class frmDetailDataGridView

  2.     ' / --------------------------------------------------------------------------------
  3.     '/ Don't forget to set Form has KeyPreview = True
  4.     Private Sub frmDetailDataGridView_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
  5.         Select Case e.KeyCode
  6.             Case Keys.F8
  7.                 '/ Remove Row
  8.                 Call DeleteRow("btnDelRow")
  9.         End Select
  10.     End Sub

  11.     ' / --------------------------------------------------------------------------------
  12.     Private Sub frmDetailDataGridView_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  13.         Me.KeyPreview = True  '/ สามารถกดปุ่มฟังค์ชั่นคีย์ลงในฟอร์มได้
  14.         Call InitializeGrid()
  15.         '/
  16.         txtSumTotal.ReadOnly = True
  17.         txtSumTotal.Text = "0.00"
  18.         lblLastPrice.Text = ""
  19.     End Sub

  20.     ' / --------------------------------------------------------------------------------
  21.     Private Sub InitializeGrid()
  22.         With dgvData
  23.             .RowHeadersVisible = False
  24.             .AllowUserToAddRows = False
  25.             .AllowUserToDeleteRows = False
  26.             .AllowUserToResizeRows = False
  27.             .MultiSelect = False
  28.             .ReadOnly = False
  29.             .RowTemplate.MinimumHeight = 27
  30.             .RowTemplate.Height = 27
  31.             '/ Columns Specified
  32.             '/ Index = 0
  33.             .Columns.Add("PK", "Primary Key")
  34.             With .Columns("PK")
  35.                 .ReadOnly = True
  36.                 .DefaultCellStyle.BackColor = Color.LightGoldenrodYellow
  37.                 .Visible = True 'False '/ ปกติหลัก Primary Key จะต้องถูกซ่อนไว้
  38.             End With
  39.             '/ Index = 1
  40.             .Columns.Add("ProductID", "Product ID")
  41.             .Columns("ProductID").ReadOnly = True
  42.             '/ Index = 2
  43.             .Columns.Add("ProductName", "Product Name")
  44.             .Columns("ProductName").ReadOnly = True
  45.             '/ Index = 3
  46.             .Columns.Add("Quantity", "Quantity")
  47.             .Columns("Quantity").ValueType = GetType(Integer)
  48.             '/ Index = 4
  49.             .Columns.Add("UnitPrice", "Unit Price")
  50.             .Columns("UnitPrice").ValueType = GetType(Double)
  51.             '/ Index = 5
  52.             .Columns.Add("Total", "Total")
  53.             .Columns("Total").ValueType = GetType(Double)
  54.             .Font = New Font("Tahoma", 11)
  55.             '/ Total Column
  56.             With .Columns("Total")
  57.                 .ReadOnly = True
  58.                 .DefaultCellStyle.BackColor = Color.LightGoldenrodYellow
  59.                 .DefaultCellStyle.ForeColor = Color.Blue
  60.                 .DefaultCellStyle.Font = New Font(dgvData.Font, FontStyle.Bold)
  61.             End With
  62.             '// เพิ่มปุ่มลบ (Index = 6)
  63.             Dim btnDelRow As New DataGridViewButtonColumn
  64.             dgvData.Columns.Add(btnDelRow)
  65.             With btnDelRow
  66.                 .HeaderText = "Delete F8"
  67.                 .Text = "Delete"
  68.                 .UseColumnTextForButtonValue = True
  69.                 .Width = 60
  70.                 .ReadOnly = True
  71.                 .HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
  72.                 .SortMode = DataGridViewColumnSortMode.NotSortable  '/ Not sort order but can click header for delete row.
  73.             End With

  74.             '/ Alignment MiddleRight only columns 3 to 5
  75.             For i As Byte = 3 To 5
  76.                 '/ Header Alignment
  77.                 .Columns(i).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
  78.                 '/ Cell Alignment
  79.                 .Columns(i).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
  80.             Next
  81.             '/ Auto size column width of each main by sorting the field.
  82.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  83.             '/ Adjust Header Styles
  84.             With .ColumnHeadersDefaultCellStyle
  85.                 .BackColor = Color.RoyalBlue
  86.                 .ForeColor = Color.White
  87.                 .Font = New Font("Tahoma", 11, FontStyle.Bold)
  88.             End With
  89.             .ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
  90.             .ColumnHeadersHeight = 36
  91.             '/ กำหนดให้ EnableHeadersVisualStyles = False เพื่อให้ยอมรับการเปลี่ยนแปลงสีพื้นหลังของ Header
  92.             .EnableHeadersVisualStyles = False
  93.         End With

  94.     End Sub

  95.     ' / --------------------------------------------------------------------------------
  96.     '// SAMPLE DATATABLE
  97.     Private Function GetDataTable() As DataTable
  98.         Dim DT As New DataTable
  99.         '// Add Columns
  100.         With DT.Columns
  101.             .Add("PK", GetType(Integer))
  102.             .Add("ProductID", GetType(String))
  103.             .Add("ProductName", GetType(String))
  104.             .Add("UnitPrice", GetType(Double))
  105.         End With
  106.         '// Add Rows
  107.         With DT.Rows
  108.             '// PK, ProductID, ProductName, UnitPrice
  109.             .Add(1, "01", "Classic Checken", "45.00")
  110.             .Add(2, "02", "Mexicana", "85.00")
  111.             .Add(3, "03", "Lemon Shrimp", "110.00")
  112.             .Add(4, "04", "Bacon", "90.00")
  113.             .Add(5, "05", "Spicy Shrimp", "120.00")
  114.             .Add(6, "06", "Tex Supreme", "80.00")
  115.             .Add(7, "07", "Fish", "100.00")
  116.             .Add(8, "08", "Pepsi Small", "20.00")
  117.             .Add(9, "09", "Coke Small", "20.00")
  118.             .Add(10, "10", "7Up Small", "20.00")
  119.             .Add(11, "11", "มอคค่า", "85.00")
  120.             .Add(12, "12", "อเมริกาโน่", "95.00")
  121.             .Add(13, "13", "เอ็กซเพรสโซ่", "115.00")
  122.             .Add(14, "14", "ชานมไข่มุก", "45.00")
  123.             .Add(15, "15", "เหล้าเป็ก", "99.00")
  124.         End With
  125.         Return DT
  126.     End Function

  127.     ' / --------------------------------------------------------------------------------
  128.     ' / การค้นหาข้อมูลในช่อง TextBox
  129.     Private Sub txtSearch_KeyPress(sender As Object, e As System.Windows.Forms.KeyPressEventArgs) Handles txtSearch.KeyPress
  130.         '// เมื่อกดคีย์ ENTER เพื่อเริ่มต้นการค้นหาข้อมูล
  131.         If e.KeyChar = Chr(13) Then
  132.             e.Handled = True    '// ปิดเสียง
  133.             '/ สร้าง DataTable สมมุติขึ้นมา
  134.             Dim DT As DataTable = GetDataTable()
  135.             '/ ค้นหาข้อมูลจาก DataTable แล้วรับค่ามาใส่ไว้ใน DataRow
  136.             '/ การค้นหาข้อมูลแบบ String จะต้องใส่เครื่องหมาย Single Quote ครอบเอาไว้ เช่น ProductID = '01'
  137.             Dim r() As DataRow = DT.Select(" ProductID = " & "'" & txtSearch.Text.Trim & "'")
  138.             '// หากพบข้อมูลใน DataTable
  139.             If r.Count > 0 Then
  140.                 '/ ตัวแปรบูลีน Flag แจ้งการค้นหาข้อมูลในตารางกริด (True = พบรายการในแถว, False = ไม่พบ)
  141.                 Dim blnExist As Boolean = False
  142.                 '/ ต้องค้นหาข้อมูลจากตารางกริดก่อน เพื่อค้นหาว่ามีรายการสินค้าเดิมหรือไม่?
  143.                 '/ หากในตารางกริดยังไม่มีแถวรายการ ก็จะข้าม For Loop นี้ไปเพิ่มรายการใหม่ทันที (ครั้งแรกที่ยังไม่มีข้อมูลในตารางกริด)
  144.                 For iRow As Integer = 0 To dgvData.RowCount - 1
  145.                     '/ ทดสอบด้วย Primary Key r(0).Item(0) หรือ Product ID r(0).Item(1) ก็ได้
  146.                     If r(0).Item(0) = dgvData.Rows(iRow).Cells(0).Value Then
  147.                         '/ เมื่อพบรายการเดิม ก็ให้เพิ่มจำนวนขึ้น 1
  148.                         dgvData.Rows(iRow).Cells(3).Value += 1
  149.                         lblLastPrice.Text = "Last Price: " & CDbl(dgvData.Rows(iRow).Cells(4).Value).ToString("0.00")
  150.                         '/ Flag แจ้งว่าพบข้อมูลเดิมแล้ว
  151.                         blnExist = True
  152.                         '/ เมื่อเจอสินค้าเดิมในตารางกริดแล้ว ไม่ว่าจะอยู่แถวลำดับที่เท่าไหร่ ก็ให้ออกจาก For Loop การค้นหาได้เลย
  153.                         '/ เพราะรายการสินค้าใดๆ จะต้องมีอยู่เพียงแค่รายการเดียว ไม่ต้องเสียเวลาวนรอบกลับไปทำให้จนครบจำนวนแถว
  154.                         Exit For
  155.                     End If
  156.                 Next
  157.                 '/ กรณีที่พบสินค้าในตารางกริด กำหนด blnExist = True ทำให้ Not True = False จะทำให้ข้ามเงื่อนไขนี้ออกไป
  158.                 '/ กรณีที่ไม่พบข้อมูลสินค้าเดิมในตารางกริด กำหนด blnExist = False ทำให้ Not False = True เพิ่มรายการสินค้าแถวใหม่เข้าไปในตารางกริดได้
  159.                 If Not blnExist Then
  160.                     '/ Primary Key, Product ID, Product Name, Quantity, UnitPrice, Total
  161.                     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")
  162.                     lblLastPrice.Text = "Last Price: " & CDbl(r(0).Item(3)).ToString("0.00")
  163.                 End If
  164.                 '/ หากไม่ใช้ NOT ก็จะต้องเขียนโปรแกรมแบบนี้
  165.                 '/ If blnExist = True Then
  166.                 '/     ไม่ต้องทำอะไร
  167.                 '/ Else
  168.                 '/     ทำคำสั่งเพิ่มรายการ
  169.                 '/ End If
  170.                 '// คำนวณผลรวมใหม่
  171.                 Call CalSumTotal()
  172.                 DT.Dispose()
  173.             End If
  174.             txtSearch.Clear()
  175.             txtSearch.Focus()
  176.         End If
  177.     End Sub

  178.     ' / --------------------------------------------------------------------------------
  179.     ' / Calcualte sum of Total (Column Index = 5)
  180.     ' / ทำทุกครั้งที่มีการเพิ่มหรือลบแถวรายการ และมีการเปลี่ยนแปลงค่าในเซลล์ Quantity, UnitPrice
  181.     Private Sub CalSumTotal()
  182.         txtSumTotal.Text = "0.00"
  183.         '/ วนรอบตามจำนวนแถวที่มีอยู่ปัจจุบัน
  184.         For i As Integer = 0 To dgvData.RowCount - 1
  185.             '/ หลักสุดท้ายของตารางกริด = [จำนวน x ราคา]
  186.             dgvData.Rows(i).Cells(5).Value = Format(dgvData.Rows(i).Cells(3).Value * dgvData.Rows(i).Cells(4).Value, "#,##0.00")
  187.             '/ นำค่าจาก Total มารวมกันเพื่อแสดงผลในสรุปผลรวม (x = x + y)
  188.             txtSumTotal.Text = Format(CDbl(txtSumTotal.Text) + CDbl(dgvData.Rows(i).Cells(5).Value), "#,##0.00")
  189.         Next
  190.     End Sub

  191.     ' / --------------------------------------------------------------------------------
  192.     ' / โปรแกรมย่อยในการลบแถวรายการที่เลือกออกไป
  193.     Private Sub DeleteRow(ByVal ColName As String)
  194.         If dgvData.RowCount = 0 Then Return
  195.         '/ ColName เป็นชื่อของหลัก Index = 6 ของตารางกริด (ไปดูที่โปรแกรมย่อย InitializeGrid)
  196.         If ColName = "btnDelRow" Then
  197.             '// ลบรายการแถวที่เลือกออกไป
  198.             dgvData.Rows.Remove(dgvData.CurrentRow)
  199.             '/ เมื่อแถวรายการถูกลบออกไป ต้องไปคำนวณหาค่าผลรวมใหม่
  200.             Call CalSumTotal()
  201.         End If
  202.         txtSearch.Focus()
  203.     End Sub

  204.     Private Sub dgvData_CellClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellClick
  205.         Select Case e.ColumnIndex
  206.             '// Delete Button
  207.             Case 6
  208.                 'MsgBox(("Row : " + e.RowIndex.ToString & "  Col : ") + e.ColumnIndex.ToString)
  209.                 Call DeleteRow("btnDelRow")
  210.         End Select
  211.     End Sub

  212.     ' / --------------------------------------------------------------------------------
  213.     ' / After you press Enter
  214.     Private Sub dgvData_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellEndEdit
  215.         '/ เกิดการเปลี่ยนแปลงค่าในหลัก Index ที่ 3 หรือ 4
  216.         Select Case e.ColumnIndex
  217.             Case 3, 4 '/ Column Index = 3 (Quantity), Column Index = 4 (UnitPrice)
  218.                 '/ Quantity
  219.                 '/ การดัก Error กรณีมีค่า Null Value ให้ใส่ค่า 0 ลงไปแทน
  220.                 If IsDBNull(dgvData.Rows(e.RowIndex).Cells(3).Value) Then dgvData.Rows(e.RowIndex).Cells(3).Value = "0"
  221.                 Dim Quantity As Integer = dgvData.Rows(e.RowIndex).Cells(3).Value
  222.                 '/ UnitPrice
  223.                 '/ If Null Value
  224.                 If IsDBNull(dgvData.Rows(e.RowIndex).Cells(4).Value) Then dgvData.Rows(e.RowIndex).Cells(4).Value = "0.00"
  225.                 Dim UnitPrice As Double = dgvData.Rows(e.RowIndex).Cells(4).Value
  226.                 dgvData.Rows(e.RowIndex).Cells(4).Value = Format(CDbl(dgvData.Rows(e.RowIndex).Cells(4).Value), "0.00")

  227.                 '/ Quantity x UnitPrice
  228.                 dgvData.Rows(e.RowIndex).Cells(5).Value = CDbl((Quantity * UnitPrice).ToString("#,##0.00"))
  229.                 '/ Calculate Summary
  230.                 Call CalSumTotal()
  231.         End Select
  232.     End Sub

  233.     ' / --------------------------------------------------------------------------------
  234.     Private Sub dgvData_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvData.EditingControlShowing
  235.         Select Case dgvData.Columns(dgvData.CurrentCell.ColumnIndex).Name
  236.             ' / Can use both Colume Index or Field Name
  237.             Case "Quantity", "UnitPrice"
  238.                 '/ Stop and Start event handler
  239.                 RemoveHandler e.Control.KeyPress, AddressOf ValidKeyPress
  240.                 AddHandler e.Control.KeyPress, AddressOf ValidKeyPress
  241.         End Select
  242.     End Sub

  243.     ' / --------------------------------------------------------------------------------
  244.     Private Sub ValidKeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
  245.         Dim tb As TextBox = sender
  246.         Select Case dgvData.CurrentCell.ColumnIndex
  247.             Case 3  ' Quantity is Integer
  248.                 Select Case e.KeyChar
  249.                     Case "0" To "9"   ' digits 0 - 9 allowed
  250.                     Case ChrW(Keys.Back)    ' backspace allowed for deleting (Delete key automatically overrides)

  251.                     Case Else ' everything else ....
  252.                         ' True = CPU cancel the KeyPress event
  253.                         e.Handled = True ' and it's just like you never pressed a key at all
  254.                 End Select

  255.             Case 4  ' UnitPrice is Double
  256.                 Select Case e.KeyChar
  257.                     Case "0" To "9"
  258.                         ' Allowed "."
  259.                     Case "."
  260.                         ' can present "." only one
  261.                         If InStr(tb.Text, ".") Then e.Handled = True

  262.                     Case ChrW(Keys.Back)
  263.                         '/ Return False is Default value

  264.                     Case Else
  265.                         e.Handled = True

  266.                 End Select
  267.         End Select
  268.     End Sub

  269.     Private Sub frmDetailDataGridView_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  270.         Me.Dispose()
  271.         GC.SuppressFinalize(Me)
  272.         Application.Exit()
  273.     End Sub

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

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

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

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

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

0

กระทู้

2

โพสต์

86

เครดิต

Member

Rank: 2

เครดิต
86
โพสต์ 2023-1-23 14:33:07 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2024-3-29 14:04 , Processed in 0.324563 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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