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

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

[VB.NET] การใช้งานตารางกริด GridGroupingControl ของฟรีระดับโลกจากค่าย Syncfusion

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

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
5973


วันนี้แอดมินจะมาขอแนะนำ ตารางกริดระดับสุดยอดของฟรีจริงๆจากค่าย Syncfusion ภายใต้ชื่อ Syncfusion Essential รุ่น Community ซึ่งทางผู้ผลิตกำหนดเงื่อนไขในการใช้งานฟรีว่า องค์กรนั้นๆต้องมี Deveopers ไม่เกิน 5 คน และมีผลประกอบการไม่เกิน 1 ล้านยูเอสดอลล่าร์ ... และที่สำคัญคือ สามารถนำโปรเจคของเราไปจำหน่ายในเชิงพาณิชย์ได้ครับทั่นผู้ชม ... ท่านสามารถเข้าไปสมัครและรับของฟรีมาใช้ได้เลย นอกเหนือไปจากนั้นค่ายนี้เขายัง eBook ในรูปแบบ PDF แจกฟรีเอาไว้ให้เราได้อ่านกันอีกหลายเรื่องครับ ...

โดยหลักๆที่ทางผู้ผลิตให้มาประกอบไปด้วย ...

- 800+ Controls and Frameworks
- Enterprise solutions for Big Data, Dashboards and Reporting
- A $15,960 value for FREE
- Support and updates included

Control ตัวแรกที่แอดมินทดสอบคือ ตารางกริด GridGroupingControl ซึ่งจะขอเรียกชื่อย่อว่า GGC กันนะครับ ซึ่งเป็นตารางกริดแบบแสดงผลทั่วไปได้ และสามารถทำการจัดกลุ่มได้ด้วย (อันนี้สำมะคัญเลย) การทดสอบทั่วๆไปที่แอดมินวางแนวทางไว้ดังนี้ คือ ...
- เรื่องหน้าตาก่อนล่ะ อันนี้ผ่านฉลุยตั้งแต่แรกเริ่มที่ได้ลูบคลำแล้วครับ 5555+
- ทำงานได้รวดเร็ว อันนี้แอดมินลองทดสอบดูเอง จึงได้นำข้อมูลมาเผยแพร่นี่แหละครับ
- การควบคุม ยากง่ายขนาดไหน ซึ่งมันอยู่ที่เรื่องประสบการณ์ของแต่ละบุคคล ในการค้นหาคำตอบ

อันดับแรกต้องดู ลักษณะโครงสร้างของตัว GridGroupingControl ให้ลึกซึ้งดื่มด่ำซ่ะก่อน เพราะเวลาไปอ่านคู่มือเราจะโฟกัสในทีละส่วนได้

วิธีการหลักๆในการศึกษา Control ต่างๆแล้ว เราจะต้องดูจาก คู่มือ หรือ Help ที่มีมาให้ เรื่องนี้เป็นเรื่องที่สำคัญที่หลายๆคนมักมองข้ามไป โดยเฉพาะบรรดามือใหม่ทั้งหลาย ที่ไม่ค่อยยอมอ่านกัน กะจะหาแต่เพียงในอินเทอร์เน็ต ซึ่งจะทำให้เราพัฒนาศักยภาพตัวเองต่อไปได้ยากลำบาก อีกทั้งตัวอย่างที่ Syncfusion ให้มา ก็ล้วนแล้วแต่เป็น C# ทั้งนั้น แต่ข้อมูลรายละเอียดในการควบคุม GGC ด้วย VB.Net มันกลับไปอยู่ที่ Help ...

อนึ่ง!!! ... Control ต่างๆที่เราใช้งานกันอยู่ในปัจจุบัน มันมีคุณสมบัติ (Properties) ประจำตัวอยู่นับร้อยๆอย่าง ซึ่งเราไม่สามารถจดจำมันได้ทั้งหมดหรอกครับ ดังนั้นในงานทั้งหมดของแอดมิน จะใช้ วิธีการแบบ Run-Time คือใช้การเขียนโค้ด แล้วสั่งรันโปรแกรมจึงจะเห็นผล แทนที่จะจับ Control ลากมาวางแล้วปรับแต่งคุณสมบัติผ่าน Design-Time เพราะ ...
- เราไม่ต้องจดจำ แต่อาศัยความเข้าใจด้วยการอ่าน หรือตีความหมายจากโค้ดแทน
- Copy & Paste โค้ดไปใช้ได้ โดยที่ไม่ต้องห่วงพะวงกับเวอร์ชั่นของตัว Control เอง  
- เมื่อเข้าใจในพฤติกรรมของ Control แต่ละตัว ก็จะสามารถควบคุมมันได้ตามใจนึก ... สิ่งนี้จะนำทางให้เราเรียนรู้ฝึกฝน กับบรรดา Control ตัวใหม่ๆต่างค่ายได้อย่างไม่ยากเย็นนัก เพราะหลักการต่างๆมันแทบไม่ได้แตกต่างกันเลย

References ... เวอร์ชั่นปัจจุบันที่แอดมินใช้ คือ 15.2.0.40 นะครับ เพราะไม่รู้ว่าทำไมเวอร์ชั่นที่ใหม่กว่านี้ มันตัดเอาโค้ดตัวอย่าง Syncfusion Control Panel ทิ้งไปซ่ะดื้อๆ 5555+

Design Time ... การจับลาก GridGroupingControl มาวางแปะไว้บนฟอร์ม โดยที่ไม่ต้องไปกำหนดค่าคุณสมบัติอะไรทั้งสิ้น เราจะใช้การสั่งจากโค้ดแทน


ตัวอย่างการ Join ตารางข้อมูล 2 ตาราง (เพราะเดี๋ยวรอบหน้าแอดมินจะสาธิตวิธีการทำ Group หรือการจัดกลุ่มด้วยวิธีการเขียนโค้ดให้ดูอีกที) มาดูโค้ดตัวอย่างบางส่วนกัน ...
  1.     ' / -----------------------------------------------------------------
  2.     ' / Initilized GridGroupingControl
  3.     Private Sub InitGridGroup()
  4.         '// Initialize Columns GridGroup
  5.         With Me.GGC
  6.             '// Hidden Primary Key Column
  7.             .TableDescriptor.VisibleColumns.Remove("PrimaryKey")
  8.             'Using Column Name
  9.             .TableDescriptor.Columns("ID").HeaderText = "ID"
  10.             .TableDescriptor.Columns("NumberField").HeaderText = "Number Value"
  11.             .TableDescriptor.Columns("DoubleField").HeaderText = "Double Value"
  12.             .TableDescriptor.Columns("DateField").HeaderText = "Date"
  13.             .TableDescriptor.Columns("DateField").Appearance.AnyRecordFieldCell.Format = "dd/MM/yyyy"
  14.             .TableDescriptor.Columns("DateField").Appearance.AnyRecordFieldCell.CellType = GridCellTypeName.TextBox
  15.         End With
  16.         '// GridVerticalAlignment.Middle
  17.         For i As Byte = 0 To 5
  18.             With Me.GGC
  19.                 .TableDescriptor.Columns(i).Appearance.AnyRecordFieldCell.VerticalAlignment = GridVerticalAlignment.Middle
  20.                 .TableDescriptor.Columns(i).AllowGroupByColumn = False
  21.             End With
  22.         Next
  23.         '// Initialize normal GridGrouping
  24.         With Me.GGC
  25.             ' Allows GroupDropArea to be visible
  26.             .ShowGroupDropArea = False  ' Disable
  27.             '// Hidden Top Level of Grouping
  28.             .TopLevelGroupOptions.ShowCaption = False

  29.             '// Metro Styles
  30.             .GridVisualStyles = Syncfusion.Windows.Forms.GridVisualStyles.Metro
  31.             ' Disables editing in GridGroupingControl
  32.             .ActivateCurrentCellBehavior = GridCellActivateAction.None
  33.             '.ActivateCurrentCellBehavior = GridCellActivateAction.ClickOnCell
  34.             '// Disable Add New
  35.             .TableDescriptor.AllowNew = False
  36.             '// Autofit Columns
  37.             .AllowProportionalColumnSizing = True

  38.             '// Row Height
  39.             .Table.DefaultRecordRowHeight = 25
  40.             '//
  41.             .Table.DefaultCaptionRowHeight = 25
  42.             .Table.DefaultColumnHeaderRowHeight = 30    '// Columns Header

  43.             '// Selection
  44.             .TableOptions.ListBoxSelectionMode = SelectionMode.One
  45.             'Selection Back color
  46.             .TableOptions.SelectionBackColor = Color.Firebrick
  47.             '//
  48.             .Appearance.ColumnHeaderCell.TextColor = Color.DarkBlue

  49.             'Applies back color as LightCyan for alternative records in the Grid.
  50.             .Appearance.AlternateRecordFieldCell.BackColor = Color.LightCyan

  51.             '.TableModel.Options.SelectCellsMouseButtonsMask = MouseButtons.Right

  52.             '/ Disable record preview row
  53.             .TableOptions.ShowRecordPreviewRow = False
  54.             '//
  55.             '/ Will enable the Group Header for the top most group.
  56.             .TopLevelGroupOptions.ShowGroupHeader = False ' True
  57.             '/ Will enable the Group Footer for the group.
  58.             .TopLevelGroupOptions.ShowGroupFooter = False 'True
  59.             '//
  60.             .TableOptions.GroupHeaderSectionHeight = 30
  61.             .TableOptions.GroupFooterSectionHeight = 30
  62.         End With

  63.     End Sub
คัดลอกไปที่คลิปบอร์ด
การตั้งค่าคุณสมบัติ (Properties) เริ่มต้น ให้กับตัวหลักๆของ GridGroupingControl ... หากนำไปใช้กับโปรเจคอื่นๆก็แค่ Copy & Paste ไปใช้งานได้เลย ส่วนตัว Control ไม่ว่าจะเวอร์ชั่นไหนก็ไม่สำคัญ

การค้นคืนข้อมูล (Retrieval Data) อันนี้เรียกได้ว่าเป็นแพทเทิร์นของทุกๆงาน
  1.     ' / -----------------------------------------------------------------
  2.     ' / blnSearch = True, It's search for specified data, False = all data is displayed.
  3.     Private Sub RetrieveData(Optional ByVal blnSearch As Boolean = False)
  4.         strSQL = _
  5.             " SELECT tblSample.PrimaryKey, tblSample.ID, tblSample.NumberField, tblSample.DoubleField, " & _
  6.             " tblSample.DateField, tblGroup.GroupName " & _
  7.             " FROM tblSample INNER JOIN tblGroup ON tblSample.GroupFK = tblGroup.GroupPK "

  8.         '// blnSearch = True for Search
  9.         If blnSearch Then
  10.             strSQL = strSQL & _
  11.                 " WHERE " & _
  12.                 " [ID] " & " Like '%" & txtSearch.Text & "%'" & " OR " & _
  13.                 " [GroupName] " & " Like '%" & txtSearch.Text & "%'" & _
  14.                 " ORDER BY PrimaryKey "
  15.         Else
  16.             strSQL = strSQL & " ORDER BY PrimaryKey "
  17.         End If
  18.         '//
  19.         If Conn.State = ConnectionState.Closed Then Conn.Open()
  20.         '// Creates Data Adapter.
  21.         DA = New OleDbDataAdapter(strSQL, Conn)
  22.         ' Creates and fills Data Set.
  23.         DS = New DataSet
  24.         DA.Fill(DS)
  25.         Me.GGC.DataSource = DS.Tables(0)
  26.         lblRecordCount.Text = "[Total: " & Format(DS.Tables(0).Rows.Count, "#,##") & " Records.]"
  27.         DA.Dispose()
  28.         DS.Dispose()
  29.         Conn.Close()
  30.         '//
  31.         Call InitGridGroup()
  32.         '//
  33.         txtSearch.Clear()
  34.     End Sub
คัดลอกไปที่คลิปบอร์ด

เหตุการณ์ที่ผู้ใช้เลือกแต่ละแถวรายการ ด้วยการกดดับเบิ้ลคลิ๊กเมาส์
  1.     ' / -----------------------------------------------------------------
  2.     '// Double click event for show Primary Key which hidden in Column(0)
  3.     Private Sub GGC_TableControlCellDoubleClick(ByVal sender As Object, ByVal e As Syncfusion.Windows.Forms.Grid.Grouping.GridTableControlCellClickEventArgs) Handles GGC.TableControlCellDoubleClick
  4.         '// Row of Column Header
  5.         If e.Inner.RowIndex <= 1 Then Return
  6.         '/ Notify the double click performed in a cell
  7.         Dim rec As Record = Me.GGC.Table.DisplayElements(e.TableControl.CurrentCell.RowIndex).ParentRecord
  8.         If (rec) IsNot Nothing Then
  9.             MsgBox("Primary key = " & rec.GetValue("PrimaryKey").ToString)
  10.         End If
  11.     End Sub
คัดลอกไปที่คลิปบอร์ด

เหตุการณ์ที่ผู้ใช้เลือกแต่ละแถวรายการ ด้วยการกด Enter ในแถวรายการ
  1.     ' / -----------------------------------------------------------------
  2.     '// Press enter each row.
  3.     Private Sub GGC_TableControlCurrentCellKeyPress(sender As Object, e As Syncfusion.Windows.Forms.Grid.Grouping.GridTableControlKeyPressEventArgs) Handles GGC.TableControlCurrentCellKeyPress
  4.         '// Check rows count before.
  5.         If GGC.TableModel.RowCount <= 0 Then Return
  6.         '/ Notify the current cell keypress
  7.         Dim rec As Record = Me.GGC.Table.DisplayElements(GGC.TableControl.CurrentCell.RowIndex).ParentRecord
  8.         If (rec) IsNot Nothing Then
  9.             MsgBox("Primary key = " & rec.GetValue("PrimaryKey").ToString)
  10.         End If
  11.     End Sub
คัดลอกไปที่คลิปบอร์ด

Conclusion: ขอให้สังเกตด้วยว่า แอดมินจะนำค่า Primary Key ไปไว้ในหลักแรก (Index = 0) และต้องซ่อนเอาไว้เสมอ เพราะผู้ใช้งานจะไม่ได้ใช้ค่านี้ แต่ตัวเราผู้พัฒนาโปรแกรมจะต้องใช้ค่านี้เป็นหลักในการอ้างอิงถึง สำหรับผู้ใช้งาน เขา/เธอจะเห็นเพียงค่า IDentifier หรือ ID แทน ไม่ว่าจะเป็นโปรเจคใดๆก็ตามในเรื่องราวที่เกี่ยวข้องกับฐานข้อมูล ... สวัสดี

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

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

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

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

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

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

GMT+7, 2024-3-29 12:57 , Processed in 0.183401 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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