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

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

[VB.NET] การกำหนดค่าต่ำสุดและสูงสุดให้กับเซลล์ในตารางกริด (Min/Max Value in Cell of DataGridView)

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

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
5973

โค้ดชุดนี้จะเป็นการกำหนดค่าที่จะป้อนตัวเลขให้ในแต่ละเซลล์ของตารางกริด โดยจำกัดค่าต่ำสุดไว้ที่ 0 และมีค่าสูงสุดไว้ที่ 1000 ถ้าหากเซลล์ใดมีค่า NULL (ไม่มีการป้อนข้อมูล) จะกำหนดค่าเซลล์นั้นๆให้เป็น 0 และหากว่าเกินกว่าที่กำหนดไว้ จะคืนค่าเดิมกลับคืนมา (ใช้คุณสมบัติ Tag ของ DataGridView ในการเก็บข้อมูลเดิม) ซึ่งแอดมินจะทำเป็นตัวอย่างเอาไว้ให้ 2 หลัก (Column) โดยที่หลักแรก (Index 0) จะต้องป้อนค่าเป็นเลขจำนวนเต็ม ส่วนหลักที่ 2 (Index 1) จะเป็นค่าตัวเลขแบบทศนิยม และแน่นอนว่าอาศัยเหตุการณ์ EventHandler เข้ามาช่วยในการตรวจสอบการกดคีย์ โดยที่เลขจำนวนเต็มจะรับค่าได้ 0 - 9 ส่วนจำนวนตัวเลขทศนิยมจะเพิ่มเครื่องหมาย . มาได้เพียงตัวเดียวเท่านั้น เพื่อไม่ให้เกิด Error ...





มาดูโค้ดฉบับเต็มกันเถอะ
  1. Public Class frmMain
  2.     '// START HERE
  3.     Private Sub frmMain_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  4.         Call InitializeGrid(dgvData)
  5.         Call FillSampleData()
  6.     End Sub

  7.     ' / --------------------------------------------------------------------------------
  8.     '// Default settings for Grids @Run Time
  9.     Private Sub InitializeGrid(ByRef dgv As DataGridView)
  10.         With dgv
  11.             .RowHeadersVisible = False
  12.             .AllowUserToAddRows = False
  13.             .AllowUserToDeleteRows = False
  14.             .AllowUserToResizeRows = False
  15.             .MultiSelect = False
  16.             .SelectionMode = DataGridViewSelectionMode.CellSelect
  17.             .ReadOnly = False
  18.             .Font = New Font("Tahoma", 10)
  19.             .RowHeadersVisible = True
  20.             .RowTemplate.MinimumHeight = 27
  21.             .RowTemplate.Height = 27
  22.             .AlternatingRowsDefaultCellStyle.BackColor = Color.SkyBlue
  23.             .DefaultCellStyle.SelectionBackColor = Color.OrangeRed
  24.             '/ Auto size column width of each main by sorting the field.
  25.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  26.             '/ Adjust Header Styles
  27.             With .ColumnHeadersDefaultCellStyle
  28.                 .BackColor = Color.Navy
  29.                 .ForeColor = Color.White
  30.                 .Font = New Font("Tahoma", 10, FontStyle.Bold)
  31.             End With
  32.         End With
  33.         dgvData.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing
  34.         dgvData.ColumnHeadersHeight = 36
  35.         '// กำหนดให้ EnableHeadersVisualStyles = False เพื่อให้ยอมรับการเปลี่ยนแปลงสีพื้นหลังของ Header
  36.         dgvData.EnableHeadersVisualStyles = False
  37.     End Sub

  38.     ' / --------------------------------------------------------------------------------
  39.     ' / SAMPLE DATA INTO DATAGRIDVIEW
  40.     Private Sub FillSampleData()
  41.         Dim DT As New DataTable
  42.         DT.Columns.Add("Integer Column")
  43.         DT.Columns.Add("Double Column")
  44.         Dim RandomClass As New Random()
  45.         For iRow As Long = 0 To 19
  46.             Dim DR As DataRow = DT.NewRow()
  47.             DR(0) = RandomClass.Next(1, 1000)   '// Random Integer Value 1 - 1000
  48.             DR(1) = Format(RandomClass.NextDouble * 1000, "0.00")   '// Random Double Value.
  49.             DT.Rows.Add(DR)
  50.         Next
  51.         dgvData.DataSource = DT
  52.         DT.Dispose()
  53.     End Sub

  54.     ' / --------------------------------------------------------------------------------
  55.     ' / เหตุการณ์ในการตรวจสอบเงื่อนไข หลังจากการป้อนค่าลงไปและกด Enter
  56.     Private Sub dgvData_CellEndEdit(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellEndEdit
  57.         Dim NewValue As Double = 0
  58.         '// เช็ค Null Value หากไม่ป้อนค่าใดๆ ก็กำหนดค่าต่ำสุดเป็น 0
  59.         If IsDBNull(dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value) Then
  60.             NewValue = 0    '// ค่าต่ำสุด
  61.             '// มีการป้อนค่าตัวเลข ให้นำค่าไปเก็บไว้ในตัวแปร NewValue ก่อน
  62.         Else
  63.             NewValue = dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value
  64.         End If
  65.         '// ตรวจสอบเงื่อนไขคือ 0 - 1000 (ที่จริง 0 ตัดทิ้งไปได้ เพราะเรา Validate Cell เป็นค่าต่ำสุดไว้อยู่แล้ว)
  66.         If NewValue >= 0 AndAlso NewValue <= 1000 Then
  67.             '// ค่าอยู่ในช่วง 0 - 1000 ให้นำค่าใหม่มาใส่แทน
  68.             dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value = NewValue
  69.         Else
  70.             '// ค่าไม่อยู่ในช่วง 0 - 1000 ให้นำค่าเดิมมาแทนที่ (ค่าเดิมเก็บไว้ที่ dgvData.Tag จากเหตุการณ์ dgvData_CellEnter)
  71.             dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value = dgvData.Tag
  72.         End If
  73.         '// เงื่อนไขจาก ColumnIndex เพื่อปรับชนิดข้อมูล (Convert)
  74.         Select Case e.ColumnIndex
  75.             Case 0  '// Integer
  76.                 dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value = Format(CInt(dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value), "0")
  77.             Case 1  '// Double
  78.                 dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value = Format(CDbl(dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value), "0.00")
  79.         End Select
  80.     End Sub

  81.     Private Sub dgvData_CellEnter(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellEnter
  82.         '// นำค่าเดิมไปเก็บไว้ในคุณสมบัติ Tag ของ DataGridView โดยไม่ต้องประกาศใช้งานตัวแปรใหม่
  83.         '// ปกติเราจะป้อนข้อมูลได้ทีละเซลล์อยู่แล้ว ก็ให้โฟกัสไปที่แถวและหลักนั้นๆ
  84.         dgvData.Tag = dgvData.Rows.Item(e.RowIndex).Cells(e.ColumnIndex).Value
  85.     End Sub

  86.     ' / --------------------------------------------------------------------------------
  87.     ' / เหตุการณ์ในการกดคีย์ เลขจำนวนเต็มจะรับค่าได้ 0 - 9 ส่วนเลขทศนิยมจะเพิ่มเครื่องหมาย . มาได้เพียงตัวเดียวเท่านั้น
  88.     Private Sub dgvData_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvData.EditingControlShowing
  89.         Select Case dgvData.Columns(dgvData.CurrentCell.ColumnIndex).Index
  90.             '// ColumeIndex 0 is Integer and ColumnIndex 1 is Double.
  91.             Case 0, 1
  92.                 '// Force to validate value at ValidKeyPress Event.
  93.                 RemoveHandler e.Control.KeyPress, AddressOf ValidKeyPress
  94.                 AddHandler e.Control.KeyPress, AddressOf ValidKeyPress
  95.         End Select
  96.     End Sub

  97.     ' / --------------------------------------------------------------------------------
  98.     Private Sub ValidKeyPress(sender As System.Object, e As System.Windows.Forms.KeyPressEventArgs)
  99.         Dim tb As TextBox = sender
  100.         Select Case dgvData.CurrentCell.ColumnIndex
  101.             Case 0  '// Integer
  102.                 Select Case e.KeyChar
  103.                     Case "0" To "9"   ' digits 0 - 9 allowed
  104.                     Case ChrW(Keys.Back)    ' backspace allowed for deleting (Delete key automatically overrides)
  105.                     Case Else ' everything else ....
  106.                         '// True = CPU cancel the KeyPress event
  107.                         e.Handled = True '// and it's just like you never pressed a key at all
  108.                 End Select

  109.             Case 1  '// Double
  110.                 Select Case e.KeyChar
  111.                     Case "0" To "9"
  112.                         '// Allowed "."
  113.                     Case "."
  114.                         '// But it can present "." only one.
  115.                         If InStr(tb.Text, ".") Then e.Handled = True

  116.                     Case ChrW(Keys.Back)
  117.                     Case Else
  118.                         e.Handled = True
  119.                 End Select
  120.         End Select
  121.     End Sub

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


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


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

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

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

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

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

GMT+7, 2024-3-29 11:41 , Processed in 0.211191 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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