รวบรวม Code ต่างๆนานา ที่เคยพบเจอมาจากประสบการณ์

UNDERGROUND PROGRAMMER PRESENT

วันอังคารที่ 22 สิงหาคม พ.ศ. 2560

VB.NET Code#2 DataGridViewProgressBarColumn

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


-------- เอาละผ่านไปหนึ่งเรื่อง แล้วพบกันใหม่ในบทความต่อไปเน้อ หากมีข้อสงสัยประการใดก็ติดต่อสอบถามมาได้นะ 😎

ไม่มีความคิดเห็น:

แสดงความคิดเห็น