nongnot โพสต์ 2020-9-19 21:26:22

รบกวรขอคำชี้แนะ ทำ CheckBoxในDataGrid .net

ผมพึ่งลองมาศึกษา .net 2015 ต่อกับฐานข้อมูล+DataGrid ได้แล้ว แต่ต้องการ สร้าง CheckBoc ใน DataGridทีมีข้อมูล 1 หรือ 0   แทนสถานะเช็ค กับ ไม่เช็คมีลิงค์หรือบทความให้ศึกาษาหน่อยครับ

thongkorn โพสต์ 2020-9-21 15:52:14

มีตัวอย่างอยู่ที่เรื่อง การสร้างจดหมายเวียน หรือ 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

nongnot โพสต์ 2020-9-22 07:59:08

ขอบคุณมากๆครับ ผมลองไปโหลด Syncfusion ลงทะเบียนมาใช้แล้วครับ เป็น v1.8 มันให้ทดลองใช้ 30วัน ไม่รู้ว่าผมโหลดมาถูกตัวหรือเปล่า เลยยังไม่ได้ทดลองใช้ครับ

nongnot โพสต์ 2020-9-22 08:20:09

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]
ดูในรูปแบบกติ: รบกวรขอคำชี้แนะ ทำ CheckBoxในDataGrid .net