หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 1 2 8 4 6 2

7 ธันวาคม พ.ศ.2549
242 Users On-Line.
Visitors - Page views
 8 4 2 4 5 0 1
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

ตารางกริด (MS Flex Grid) ธรรมดา ที่ไม่ธรรมดา ... ตอนการจัดเรียงข้อมูลในการแสดงผลให้ MS FlexGrid

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 20/3/2552   เวลา: 01:09
(อ่าน : 17072) 
จากตอนที่แล้วของเรื่อง ตารางกริด (MS Flex Grid) ธรรมดา ที่ไม่ธรรมดา ... มาตอนนี้ก็เป็นเรื่องของ "จินตนาการ" อีกเช่นเคย ก็ตามหัวข้อเลยครับพี่น้อง ... การจัดเรียงข้อมูลในตารางกริด ดังนั้นประเด็นนี้เราก็จะมองไปถึงการคลิ๊กเมาส์ซ้ายบน Header นั่นก็คือเกิดการ Sort (แปลว่าเรียง) Method (แปลว่าวิธี) ในแต่ละหลัก (Column) โดยหากคลิ๊กครั้งแรกก็ให้จัดเรียงจากน้อยไปหามาก พอคลิ๊กอีกครั้งก็ให้เรียงจากมากไปหาน้อย ลักษณะนี้การทำงานแบบนี้เราเรียกว่า Toggle หรือ สลับการทำงานนั่นเองครับ ... พี่น้อง ... ผมเขียนโค้ดนี้เอาไว้ใช้งานเองเมื่อราวๆ 10 ปีที่แล้ว แต่ปัจจุบันก็ยังนำมาใช้ในการถ่ายทอดความรู้ ประสบการณ์ ให้กับเด็กรุ่นใหม่ๆได้อย่างสบายเลย ... แหละนี่ก็คือ กระบวนการคิด-วิธีคิด ในการแก้ปัญหาอีกหนึ่งตัวอย่าง ... และใช้งานได้จริงๆ
กระบวนการคิด ...
  • เกิดเหตุการณ์ MouseDown หรือ คลิ๊กเมาส์ซ้ายลงไปที่ MS FlexGrid
  • ตรวจสอบว่าเป็นการคลิ๊กลงไปที่ Column Header หรือไม่ ... ด้วยแนวคิดตื้นๆ คือ หากคลิ๊กแถวใดแถวหนึ่งก็ตาม พิกัด y (แนวตั้ง) ต้องไม่เกินความสูงของแถวแรก นั่นแหละคือการคลิ๊กเลือก Header ... 55555+
  • ระบุหลักที่เกิดการคลิ๊กเมาส์ ... เพื่อให้สามารถจัดเรียงได้ตรงหลักที่ต้องการ
  • ตรวจสอบว่าเป็นการคลิ๊กแบบใด ... และใช้ Sort Method (วิธีการ) เข้าช่วยในการจัดเรียง และ สลับการทำงาน
    • SortOrder = 1 คือ การจัดเรียงจากน้อยไปหามาก (Ascending)
    • SortOrder = 2 คือ การจัดเรียงจากมากไปหาน้อย (Descending)
ดาวน์โหลด
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
ข้อมูลเพิ่มเติม
ตารางกริด (MS Flex Grid) ธรรมดา ที่ไม่ธรรมดา ... VB 6.0
การอ่านข้อมูลแบบ Text File เข้าสู่ MS FlexGrid ด้วย MS Visual Basic 6.0
ตารางกริด (MS Flex Grid) ธรรมดา ที่ไม่ธรรมดา ... ตอนใช้ Wheel Mouse ใน MS FlexGrid
ตารางกริด (MS Flex Grid) ธรรมดา ที่ไม่ธรรมดา ... ตอน MS FlexGrid สุดมหัศจรรย์หรรษา
เริ่มต้นกระบวนการทำงาน

Projects --> Component ...


Design Time


Run Time
มาดูโค้ดกันเถอะ ...

Option Explicit

' ตัวแปรเก็บค่าในการจัดเรียงข้อมูล
' SortOrder = 1 คือ การจัดเรียงจากน้อยไปหามาก (Ascending)
' SortOrder = 2 คือ การจัดเรียงจากมากไปหาน้อย (Descending)
Dim SortOrder As Byte

Private Sub Form_Load()
    Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
    Call SetupfgData
    Call DisplayfgData
    
    ' กำหนดค่าเริ่มต้น
    SortOrder = 0
End Sub

' ตั้งค่าคุณสมบัติ (Properties) ต่างๆให้กับ MS FlexGrid แบบ Run - Time
Sub SetupfgData()
    With fgData
        .Clear
        ' มี Header 1 แถว
        .FixedRows = 1
        .FixedCols = 0
        ' ให้แถบแสงยาวตามแนวนอนของแต่ละแถว
        .SelectionMode = flexSelectionByRow
        ' ตั้งค่าความสูงต่ำสุดของแต่ละแถว
        .RowHeightMin = 285
        ' ไม่ยอมให้ผู้ใช้คลิ๊กย่อ - ขยายความกว้างของแต่ละหลัก
        .AllowUserResizing = flexResizeNone
        
        ' กำหนด 5 หลัก
        .Cols = 5
        ' กำหนด 1 แถว (สำหรับ Header)
        .Rows = 1
        
        ' กำหนด Header
        .TextMatrix(0, 0) = "ProductPK" ' ปกติเราควรซ่อน Primary Key ไว้ที่หลัก 0 - DataBase
        .TextMatrix(0, 1) = "ลำดับที่"
        .TextMatrix(0, 2) = "รหัสสินค้า"
        .TextMatrix(0, 3) = "วันที่รับสินค้า"
        .TextMatrix(0, 4) = "ราคา"
        
        ' ให้หลักที่ 2 (รหัสสินค้า) แสดงตำแหน่งชิดซ้าย
        .ColAlignment(2) = vbLeftJustify
        
        .ColWidth(0) = 0
        .ColWidth(1) = 650
        .ColWidth(2) = 1400
        .ColWidth(3) = 2200
        .ColWidth(4) = 2150
    End With
End Sub

' ใส่ข้อมูลตัวอย่างลงไปใน MS FlexGrid
Sub DisplayfgData()
Dim i As Integer
    
    fgData.Rows = 6
    For i = 1 To 5
        With fgData
            .TextMatrix(i, 0) = i
            .TextMatrix(i, 1) = i
            .TextMatrix(i, 2) = Right$("0000000" & i, 7)
            .TextMatrix(i, 3) = FormatDateTime(Now() + i, vbShortDate)
            .TextMatrix(i, 4) = 6 - i
        End With
    Next
    
' อันนี้ผมเจตนาใส่รายการมามั่วเอง เพื่อให้เห็นผลของการจัดเรียงได้อย่างชัดเจน
fgData.TextMatrix(2, 3) = "05/02/52"
fgData.TextMatrix(3, 4) = 9
End Sub

' เหตุการณ์สำคัญ ... เมื่อคลิ๊กเมาส์ซ้ายลงบน MS FlexGrid
Private Sub fgData_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
      
    ' กระบวนการแนวคิดแบบตื้นๆ ... สะอื้นทรวง ... 55555+ ... อยากรู้ว่าผู้ใช้คลิ๊กที่ Header หรือไม่ ?????
    ' ตรวจสอบตำแหน่งของเมาส์ที่ชี้ไปแกน y จะต้องมีค่าน้อยกว่าความสูงของแถวแรก (Header)
    ' นั่นก็คือ ... ผู้ใช้คลิ๊กเลือก Header ยังไงล่ะครับ ... พี่น้อง ... ไม่เห็นจะยากเลย
    ' Debug.Print "ความสูงแถวแรก = " & fgData.RowHeight(0) & vbCrLf & "พิกัด y = " & y
    If y < fgData.RowHeight(0) Then
        
        ' ระบุหลักที่ใช้ในการจัดเรียงข้อมูล
        fgData.Col = fgData.MouseCol
    
        ' ไปโปรแกรมย่อยในการจัดเรียงข้อมูลใหม่
        Call SortGrid
        
    End If

End Sub

Private Sub SortGrid()
    ' ลักษณะของการ Toggle หรือ การทำงานสลับไปมา
    ' 1 = การจัดเรียงจากน้อยไปหามาก (Ascending - ASC)
    ' 2 = การจัดเรียงจากมากไปหาน้อย (Descending - DESC)

    ' หากเคยจัดเรียงจากมากไปหาน้อย (SortOrder = 2) ...
    ' ต้องลดค่าลง 1 เพื่อสลับการเรียงจากน้อยไปหามาก หรือ SortOrder = 1
    If SortOrder = 2 Then
        SortOrder = SortOrder - 1
    ' หากไม่ใช่ 2 แสดงว่าค่า SortOrder เป็น 0 หรือ 1 ... 
    ' หากเป็น 0 ก็บวกเข้าไปอีก 1 ก็จะได้ 1 ซึ่งเป็นการเรียงแบบน้อยไปหามาก
    ' หากเป็น 1 ก็บวกเข้าไปอีก 1 ก็จะได้ 2 ซึ่งเป็นการเรียงแบบมากไปหาน้อย
    Else
        SortOrder = SortOrder + 1
    End If
    
    ' จัดเรียงค่าตามหลักที่กำหนด
    fgData.Sort = SortOrder
    
    ' ให้เแสดงแถบแสงในแถวแรกบนสุด
    SendKeys "{DOWN}"
    fgData.Col = 0
    fgData.Row = 0
    fgData.RowSel = 0
End Sub
Conclusion:
การเรียนรู้ทางด้านคอมพิวเตอร์ หรือ เทคโนโลยี ให้ได้ผลดี ... คุณต้องเป็นคนใคร่อยากรู้ อยากเห็น และ อยากศึกษา (จนใจจะขาดรอนๆ) ให้ได้ก่อน ... หลังจากนั้นต้องสร้างจินตนาการ นำสิ่งที่คิด ที่มันล่องลอยอยู่กลางอากาศ จับต้องก็ไม่ได้ แล้วนำมันมาปั้นออกมาเป็นชิ้นงาน เพื่อให้สามารถลูบคลำ และแตะต้องสัมผัสได้ ...

จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560