วันจันทร์ที่ 4 มกราคม พ.ศ. 2553

Hierarchical Flexgrid

Hierarchical Flexgrid

Hierarchical Flexgrid เป็นตัว control แบบตารางอีกตัว ที่อยู่ใน Visual Basic 6 มีแตกต่างจาก DataGrid คือ Hierarchical Flexgrid สามารถรวมคอนฟิกเซลล์ที่อยู่ต่างแถวกัน ถ้ามีค่าเดียวกัน ตัว control มีความสามารถนี้

เมื่อกำหนด Hierarchical ADO Recordset ให้กับคุณสมบัติ DataSource เพราะสามารถแสดงเป็นหลายแถบ โดยแต่ละแถบเป็นกลุ่มคอลัมน์ขอ้มูลที่มาจาก Recordset ลูกที่ต่างกันในโครงสร้างสำคัญขั้นของข้อมูล แต่เป็นตัว control แบบอ่านอย่างเดียว

Note: Hierarchical Flexgrid มีคำสั่งมีสอดคล้องกับ Flexgrid ซึ่งไม่สนับสนุน ADO Data control และ data source แต่ Hierarchical Flexgrid นำมาใช้แทน Flexgrid

Hierarchical Flexgrid รวมอยู่ ในไฟล์ MSHFLXGD.OCX ซึ่งต้องการกระจายไปกับโปรแกรมประยุกต์ ที่ใช้ตัว control นี้

การตั้งค่าคุณสมบัติเมื่อออกแบบ

เพื่อ สร้าง Hierarchical Flexgrid และรวมข้อมูลแล้ว จะสามารถคลิกเมาส์มุ่มขวาบนตัว control เละเลือก คำสั่ง Retrieve Structure ซึ่งเติมตารางด้วยส่วนหัวคอลัมน์อ้างถึงฟิลด์ที่ต่างในแหล่งข้อมูล แต่ไม่มีคำสั่ง Edit ทำให้ไม่สามารถใช้เมาส์ปรับปรุงและความกว้างคอลัมน์ เมื่อออกแบบ

แท็บ General

ใน แท็บ General ให้กำหนดค่าของคุณสมบัติ Rows และ Cols เพื่อหาจำนวนคอลัมน์ และแถวบนตาราง เมื่อ DataSource ยังไม่ที่แหล่งข้อมูล ADO โดยทั่วไปมิติของตาราง ขึ้นกับจำนวนเรคคอร์ดและฟิลด์ในแหล่งข้อมูล คุณสมบัติ FixedRow และ FixedCol แสดง จำนวน แถวและคอลัมน์ที่ต้องไว้ ที่ด้านซ้ายและด้านขวาของตาราง

ถ้าคุณสมบัติ AllowBigSection เป็น True การคลิกส่วนหัวของแถวหรือคอลัมน์จะเป็นการเลือกทั้งแถวหรือคอลัมน์ คุณสมบัติ Highlight มีผลต่อลักษณะภายนอกของเซลล์ที่เลือก ที่ค่าใช้ คือ 0-flexHighlightNever (ไม่มีไฮไลต์) 1-flexHighlightAlways (ไฮไลต์เซลล์ที่เลือกตลอดเวลา) และ 2-flexHighlightWithFocus (ไฮไลต์เซลล์เมื่อได้รับโฟกัส) คุณสมบัติ FocusRect แสดงลักษณะของรอบเซลล์ปัจจุบัน

คุณสมบัติ BandDisplay สามารถเปลี่ยน การแสดงลักษณะ band คุณสมบัติ FillStyle มีผลต่อวิธีการเปลี่ยนต่อคุณสมบัติ Text มีรูปแบบ คือ 0-flexFillSingle (เฉพาะเซลล์ปัจจุบัน) 1-flexFillRepeat (เซลล์ที่เลือกทั้งหมด) คุณสมบัติ SelectionMode สำหรับวิธีการเลือกเฉพาะเซลล์ บังคับเลือกทั้งแถวหรือคอลัมน์

คุณสมบัติ AllowUserResize กำหนดวิธีการที่ให้ผู้ใช้ปรับขนาดแถว หรือคอลัมน์ด้วยเมาส์ ตามค่าดังนี้ 0-flexResizeNone (ไม่ให้ปรับขนาด) 1-flexResizeColumn (ปรับได้เฉพาะคอลัมน์) 2-flexResizeRows (ปรับได้เฉพาะแถว) หรือ 3-flexResizeBoth (ปรับได้ทั้ง 2 แถว) การจำกัดผลการปรับขนาดแถวสามารถใช้คุณสมบัติ RowSizingMode สามารถเป็น 0-flexRowSizeIndividual (เฉพาะแถวที่ปรับขนาด และเป็นค่าเริ่มต้น) และ 1-flexRowSizeAll (แถวทั้งหมดได้รับการปรับขนาด)

แท็บ Bands

แท็บ Bands เป็นแท็บที่สำคัญซึ่งเกี่ยวข้องกับการเลือกฟิลด์ใน Recordset แม่และลูกให้มองเห็นได้ในตาราง ตามปกติมักจะมีการซ่อนที่ฟิลด์ numeric key ที่ไม่สื่อความหมายกับผู้ใช้ และการซ้ำ foreign key
แท็บ Bands ยอมให้ตั้งค่าคุณลักษณะของ band ในฟิลด์ GridLines สามารถเลือกประเภทเส้นที่ลากระหว่าง band ปัจจุบันกับ band ต่อไป ค่าที่ตรงกับคุณสมบัติ GridLinesBand สามารถเป็นค่า 0-flexGridNone, 1-flexGridFlat (ค่าเริ่มต้น) 2-flexGridInset, 3-flexGridRaised, 4-flexGridDashes หรือ 5-flexGridDots
รูปแบบข้อความสามารถเลือกรูปแบบเป็น 3 มิติ ในการแสดงข้อความบน band ตามค่าในคุณสมบัติ TextStyleBand คุณสมบัติ BandIndent ใช้ตั้งค่าจำนวนคอลัมน์ของ band ที่มีการย่อหน้า คุณสมบัติBandExpandable ระบุว่า band สามารถขยาย หรือรวม จากเครื่องหมายบวก หรือลบที่จะแสดงในคอลัมน์แรก คุณสมบัติ ColumnHeader สำหรับการแสดงชื่อคอลัมน์เหนือ band

แท็บอื่น ๆ

แท็บ Style ยินยอมให้ตั้งคุณสมบัติที่มีผลกับลักษณะภายนอกของตาราง คุณสมบัติ Gridlines fixed ตรงกับรูปแบบของเส้นตาราง คุณสมบัติ TextStyleFixed แสดงข้อความ 3 มิติ แถวและคอลัมน์ที่ตรึง
คุณสมบัติ RowHeightMin เป็นค่าความสูงน้อยที่สุดของแถว ใน twips คุณสมบัติ GridLinesUnpopulated มีผลกับรูปแบบของเซลล์ที่ไม่เก็บค่า

การกำหนดเมื่อเรียกใช้

Hierarchical Flexgrid มีคุณสมบัติประมาณ 160 คุณสมบัติ ส่วนใหญ่เกี่ยวกับลักษณะภายนอก แต่มีคุณสมบัติ เมธอด และ event ที่สำคัญและใช้ประโยชน์ได้มาก

การทำงานกับเซลล์ปัจจุบัน

คุณสมบัติ เรียกใช้ที่สำคัญ ของ Hierarchical Flexgrid คือ Row, Col และ Text ซึ่งตั้งค่าและส่งออกพิกัด และข้อมูลของเซลล์ปัจจุบัน คำสั่งในโปรแกรมที่ทำงานกับตัว control ทีสามารถเปลี่ยนข้อมูลของเซลล์ แต่ค่าใหม่จะไม่เก็บลงในฐานข้อมูล เนื่องจากเป็นตัว control แบบอ่านอย่างเดียว

ตัว control มีคุณสมบัติแบบอย่างเดียว สำหรับการส่งออกสารสนเทศของเซลล์ปัจจุบัน เช่น การหาประเภทของเซลล์ปัจจุบันโดยการค้นหาคุณสมบัติ CellType
Hierarchical Flexgrid ต่างจาก DataGrid โดยยินยอมให้ทำงานกับลักษณะภายนอกของเซลล์ผ่านคุณสมบัติ เช่น CellBackColor, CellForeColor, CellFontName เป็นต้น

Private Sub MSHFlexGrid1_DblClick()
If MSHFlexGrid1.CellBackColor = vbWindowBackGround Then
' ไฮไลต์เซลล์ ด้วยตัวอักษรขาวบนพื้นหลังสีน้ำเงิน
MSHFlexGrid1.CellBackColor = vbBlue
MSHFlexGrid1.CellForeColor = vbWhite
Else
' ฟื้นสีตามค่าเริ่มต้น
MSHFlexGrid1.CellBackColor = vbWindowBackGround
MSHFlexGrid1.CellForeColor = vbWindowText
End If
End Sub

การเข้าถึงเซลล์อื่น

ถ้า คุณสมบัติ FillStyle ตั้งค่าเป็น 1-flexFillRepeat ซึ่งมีผลต่อคุณสมบัติอื่นในช่วงการเลือกเซลล์ รวมถึงคุณสมบัติ CellPicture, CellPictureAlignment และคุณสมบัติ CellFontXXXX ทำให้มีวิธีการเปลี่ยนรูปแบบของกลุ่มเซลล์ โดยการกำหนดค่าคุณสมบัติที่เหมือนกันจากการกำหนดในเซลล์เดียว
การใช้ความสามารถที่มีผลต่อหลายเซลล์ ด้วยการกำหนดในเซลล์เดียว ต้องใช้คุณสมบัติ RowSel และ ColSel เพื่อทราบถึงพิกัดของช่วงการเลือกปัจจุบัน คุณสมบัตินี้ส่งออกแถวและคอลัมน์ที่มุมหนึ่งของพื้นที่สี่เหลี่ยมที่เลือก เซลล์ที่อยู่มุมตรงข้ามจะเป็นเซลล์ที่แอ็คทีฟ และได้รับการชี้โดยคุณสมบัติ Row และ Col

Dim total As Double, r As Long, c As Long
Dim rowMin As Long, rowMax As Long
Dim colMin As Long, colMax As Long

If MSHFlexGrid1.Row < MSHFlexGrid1.RowSel Then
rowMin = MSHFlexGrid1.Row
rowMax = MSHFlexGrid1.RowSel
Else
rowMin = MSHFlexGrid1.RowSel
rowMax = MSHFlexGrid1.Row
End If

If MSHFlexGrid1.Col < MSHFlexGrid1.ColSel Then
rowMin = MSHFlexGrid1.Col
rowMax = MSHFlexGrid1.ColSel
Else
rowMin = MSHFlexGrid1.ColSel
rowMax = MSHFlexGrid1.Col
End If

On Error Resume Next

For r = rowMin To rowMax
For c = colMin To colMax
total = total + CDbl(MSHFlexGrid1.TextMatrix(r, c))
Next
Next

ดาวน์โหลดตัวอย่าง (FlexGrid.vbp)

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

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