รบกวรขอคำชี้แนะ ทำ CheckBoxในDataGrid .net
ผมพึ่งลองมาศึกษา .net 2015 ต่อกับฐานข้อมูล+DataGrid ได้แล้ว แต่ต้องการ สร้าง CheckBoc ใน DataGridทีมีข้อมูล 1 หรือ 0 แทนสถานะเช็ค กับ ไม่เช็คมีลิงค์หรือบทความให้ศึกาษาหน่อยครับ มีตัวอย่างอยู่ที่เรื่อง การสร้างจดหมายเวียน หรือ Mail Merge ด้วยของฟรี Syncfusion แล้วครับ ...หรือใช้ฟังค์ชั่น CBool ในการแปลงตัวเลขจำนวนเต็มให้เป็น TRUE/FALSE หรือ Checked/UnChecked ... จับลาก DataGridView มาวางไว้บนฟอร์ม แก้ชื่อให้เป็น dgvData เท่านั้นพอ เพราะที่เหลือจะใช้โค้ดทั้งหมดครับ
Public Class frmDataGridViewCheckBox
Private Sub frmDataGridViewCheckBox_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Call SetupDGVData(dgvData)
Call FillDataSample()
End Sub
Private Function FillDataSample() As DataTable
FillDataSample = Nothing
Try
Dim tbl As New DataTable
tbl.Columns.Add("ProductPK", GetType(Integer))
tbl.Columns.Add("ProductName", GetType(String))
tbl.Columns.Add("chkStock", GetType(Boolean))
'// กำหนด 0 = Unchecked, 1 = Checked
'// หากอยากได้กลับกันก็ใช้ Not (CBool(1))
Dim row As String() = New String() {"1", "Product 1", CBool(1)}
dgvData.Rows.Add(row)
row = New String() {"2", "Product 2", CBool(0)}
dgvData.Rows.Add(row)
row = New String() {"3", "Product 3", CBool(1)}
dgvData.Rows.Add(row)
row = New String() {"4", "Product 4", Not (CBool(1))}
dgvData.Rows.Add(row)
Return tbl
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Function
'// เหตุการณ์ในการคลิ๊กเมาส์ลงในแต่ละเซลล์ของหลักที่ 3 (Index = 2)
Private Sub dgvData_CellContentClick(sender As Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvData.CellContentClick
'// Column Index = 2
If dgvData.Columns(e.ColumnIndex).Name = "chkStock" Then
Dim isChecked As Boolean = dgvData.Rows(e.RowIndex).Cells(e.ColumnIndex).Value
If isChecked = False Then
dgvData.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = True
Else
dgvData.Rows(e.RowIndex).Cells(e.ColumnIndex).Value = False
End If
End If
End Sub
' / --------------------------------------------------------------------------------
'// Initialize DataGridView @Run Time
Private Sub SetupDGVData(ByRef DGV As DataGridView)
With dgvData
.RowHeadersVisible = False
.AllowUserToAddRows = False
.AllowUserToDeleteRows = False
.AllowUserToResizeRows = False
.MultiSelect = False
.SelectionMode = DataGridViewSelectionMode.FullRowSelect
.ReadOnly = True
.Font = New Font("Tahoma", 9)
' Columns Specified
.Columns.Add("ProductPK", "ProductPK")
.Columns.Add("ProductName", "Product Name")
'// Select Print.
Dim chkStock As New DataGridViewCheckBoxColumn
.Columns.Add(chkStock)
chkStock.HeaderText = "In Stock"
chkStock.Name = "chkStock"
With .Columns("chkStock")
.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
End With
' Autosize Column
.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
'// Even-Odd Color
.AlternatingRowsDefaultCellStyle.BackColor = Color.AliceBlue
' Adjust Header Styles
With .ColumnHeadersDefaultCellStyle
.BackColor = Color.Navy
.ForeColor = Color.Black ' Color.White
.Font = New Font("Tahoma", 9, FontStyle.Bold)
End With
End With
End Sub
End Class
ขอบคุณมากๆครับ ผมลองไปโหลด Syncfusion ลงทะเบียนมาใช้แล้วครับ เป็น v1.8 มันให้ทดลองใช้ 30วัน ไม่รู้ว่าผมโหลดมาถูกตัวหรือเปล่า เลยยังไม่ได้ทดลองใช้ครับ Dim row As String() = New String() {"1", "Product 1", CBool(1)}
DataGridView1.Rows.Add(row)
row = New String() {"2", "Product 2", CBool(0)}
DataGridView1.Rows.Add(row)
row = New String() {"3", "Product 3", CBool(1)}
DataGridView1.Rows.Add(row)
row = New String() {"4", "Product 4", Not (CBool(1))}
ทดลองรันแล้วได้ปกติครับ แล้วถ้าผมเอาท่อนนี้มา Sql Table ข้อมูลมาลงได้ไหมครับหรือต้องมีคำสั่ง วนลูปอีกที ขอบคุณครับ
หน้า:
[1]