DataGridView ชื่อนี้คุ้นหูมากมาย ใช้กันแทบทุกๆงาน แสดงผลต่างๆมากมาย แล้วยังไงละ 😔 ก็มันมีข้อมูลบางอย่างที่ต้องการนำมาแสดงไง (นอกเหนือจาก Text Field, Image, DropDown, CheckBox) แต่ที่ให้มามันดันไม่มีให้ใช้ ก็เลยต้องสร้างขึ้นมาเองแล้วเอามาใช้ไงละ
เข้าเรื่องเลยละกัน มันก็แบบว่า ต้องการที่จะนำเอา Progressbar มาแสดงผลอ่ะ เพื่อเหตุผล แสดงความคืบหน้าของข้อมูลหรือสัดส่วนเปอเซ็นต่างๆ
นี่อ่ะอยากได้แบบนี้ แล้วต้องทำอย่างไงดีละ ? 😱😱😱😱
ก็สร้างมันขึ้นมาสิครับจะยากอะไร โดย
1.สร้าง Class DataGridViewProgressBarColumn อันนี้ตัวพระเอก สามารถกำหนด Properties ต่างๆได้
2.สร้างเสร็จก็นำไปใช้ไง
LET GO !!!!
ก่อนอื่นต้องนั่งนึก เดินนึก นอนนึก ก่อนนะว่าไอ่เจ้า Progress bar นี้มันมีคุณสมบัติไรบ้างหว่า เอาว่าไป
Maximum, Minimum, Value, Text Display, Color Bar เอาแค่นี้พอก่อน (ที่เหลือสามารถเพิ่มเองได้เลย)
Link Download Code: https://1drv.ms/u/s!AqHkX7xa3W5KgUO2t2rBkkf7lV9f
* link ด้านบนจะเป็น Class ที่สร้างไว้ให้แล้วเอาไปใช้ได้เลย โดยในบทความนี้จะขออธิบายบางส่วนที่สำคัญเท่านั้นนะ
Public Class DataGridViewProgressBarCell
Inherits DataGridViewTextBoxCell
Public Sub New()
Me.maximumValue = 100
Me.mimimumValue = 0
'กำหนดค่าเริ่มต้นไว้
End Sub
Private maximumValue As Integer
Public Property Maximum() As Integer
Get
Return Me.maximumValue
End Get
Set(ByVal value As Integer)
Me.maximumValue = value
End Set
End Property
Public Overrides ReadOnly Property ValueType() As Type
Get
Return GetType(Integer)
End Get
End Property
** ในกรณีที่ต้องการให้แสดงผลเป็นค่าทศนิยมให้ทำการแก้ไข DataType ทั้งหมดให้เป็น Decimal ซะนะ
Protected Overrides Sub Paint(ByVal graphics As Graphics, _
ByVal clipBounds As Rectangle, _
ByVal cellBounds As Rectangle, _
ByVal rowIndex As Integer, _
ByVal cellState As DataGridViewElementStates, _
ByVal value As Object, _
ByVal formattedValue As Object, _
ByVal errorText As String, _
ByVal cellStyle As DataGridViewCellStyle, _
ByVal advancedBorderStyle As DataGridViewAdvancedBorderStyle, _
ByVal paintParts As DataGridViewPaintParts)
....
If TypeOf value Is Integer Then 'อันนี้คือค่าที่รับเข้ามา
intValue = CInt(value)
End If
...
Dim rate As Double = CDbl(intValue - Me.mimimumValue) / _
(Me.maximumValue - Me.mimimumValue) 'อันนี้คำนวน
...
If (paintParts And DataGridViewPaintParts.ContentForeground) = _
DataGridViewPaintParts.ContentForeground Then
Dim txt As String = String.Format("{0}%", Math.Round((rate * 100)))
Dim flags As TextFormatFlags = _
TextFormatFlags.HorizontalCenter Or _
TextFormatFlags.VerticalCenter
Dim fColor As Color = cellStyle.ForeColor
paintRect.Inflate(-2, -2)
TextRenderer.DrawText(graphics, txt, cellStyle.Font, paintRect, fColor, flags)
End If
*** ส่วนแสดง Text Display นะ โดยที่เราสามารถกำหนด Format เข้าไปได้ สมมุติต้องการจะแสดงเป็นทศนิยมก็ให้ใช้ {0:00.00} แทนนะหรือหากต้องการแบบไหนก็ ตามนี้
https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings
End Sub
End Class
เอาละจากข้างต้นเป็นการอธิบายคร่าวๆละกัน ลอง Download code ออกไปแก้ดูได้เลยนะ ขั้นตอนต่อไปจะเป็นการนำไปใช้ละ 😎😎😎
ก่อนอื่นเลยนะให้ทำการนำเข้า class ที่สร้างมาหรือ download ไปนี้เข้ามาในโปรเจคของเราก่อนละ (Add Existing Item)
Imports ชื่อโปรเจคเราอ่ะ.DataGridViewProgressBarColumn
------------------
'สร้างตัวแปรแล้วเรียกใช้งาน พร้อมทำการกำหนดคุณสมบัติตามที่ต้องการ จากนั้นก็จับยัด
Dim pbColumn As New DataGridViewProgressBarColumn()
pbColumn.DataPropertyName = "Column1"
pbColumn.Maximum = 100
With DataGridView1
.Columns.Insert(4, pbColumn)
'หรือจะใช้ .Columns.Add(pbColumn) ก็ได้ แต่ก็จะเรียงตามลำดับของ Column ละนะ
End With
-------------------
ในการใช้งานก็ให้กำหนดค่าของ Column ใน DataGridView เอา
With DataGridView1
.Rows.Item(0).Cells.Item(4).Value=50
End With
-------- เอาละผ่านไปหนึ่งเรื่อง แล้วพบกันใหม่ในบทความต่อไปเน้อ หากมีข้อสงสัยประการใดก็ติดต่อสอบถามมาได้นะ 😎
วันอังคารที่ 22 สิงหาคม พ.ศ. 2560
VB.NET Code#2 DataGridViewProgressBarColumn
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)
ไม่มีความคิดเห็น:
แสดงความคิดเห็น