以编程方式将复选框添加到 DataGridView 单元格

Add CheckBox To DataGridView Cell Programmatically

如果 CheckBox 旁边的单元格的值为“1”,我正在尝试以编程方式将 CheckBox 添加到 DataGridVew 单元格。我正在尝试在添加行时执行此操作

我希望有人能帮我找出正确的代码。我知道其中一行代码不正确,但我已将其放入以说明我正在尝试做的事情。

提前致谢。

    Private Sub Controls_DGV_RowsAdded(sender As Object, e As Windows.Forms.DataGridViewRowsAddedEventArgs) Handles Controls_DGV.RowsAdded

        If Controls_DGV.Rows(e.RowIndex).Cells(2).Value = "1" Then
            Controls_DGV.Rows(e.RowIndex).Cells(1).AddCheckBox ' THIS LINE IS INCORRECT
        End If

    End Sub

要显示复选框的列号 1 应该已经是 DataGridViewCheckBoxColumn 类型,然后如果值不是“1”,您可以将单元格类型转换为 DataGridViewTextBoxCell,因此没有复选框,并且如果你愿意,你甚至可以在那里放一些文字。因为您使用的是 3 列,所以我会尝试这样做。

在你的 Form1_Load() 中,如果你以编程方式添加列,你应该有这样的东西:

    Dim ChkBox As New DataGridViewCheckBoxColumn
    Controls_DGV.Columns.Add("TextBox1", "TextBox1")
    Controls_DGV.Columns.Add(ChkBox)
    Controls_DGV.Columns.Add("TextBox2", "TextBox2")

然后使用你的代码应该是这样的:

    Private Sub Controls_DGV_RowsAdded(sender As Object, e As Windows.Forms.DataGridViewRowsAddedEventArgs) Handles Controls_DGV.RowsAdded

        If Controls_DGV.Rows(e.RowIndex).Cells(2).Value <> "1" Then
             ' replace the checkbox cell by textbox cell
             Controls_DGV.Rows(e.RowIndex).Cells(1) = New DataGridViewTextBoxCell()
             Controls_DGV.Rows(e.RowIndex).Cells(1).Value = "(empty or some text)"
        End If
    End Sub

除了检查值外,这与@miguel 相同,在本例中 Option StrictOn,因为它应该是。

Public Class Form1
    Private Sub dataGridView1_RowsAdded(sender As Object, e As DataGridViewRowsAddedEventArgs) _
        Handles dataGridView1.RowsAdded

        If CStr(dataGridView1.Rows(e.RowIndex).Cells(1).Value) <> "1" Then
            dataGridView1.Rows(e.RowIndex).Cells(0).Value = False
            dataGridView1.Rows(e.RowIndex).Cells(0) = New DataGridViewTextBoxCell()
            dataGridView1.Rows(e.RowIndex).Cells(0).Value = ""
            dataGridView1.Rows(e.RowIndex).Cells(0).ReadOnly = True
        End If

    End Sub

    Private Sub AddRowsButton_Click(sender As Object, e As EventArgs) _
        Handles AddRowsButton.Click

        For index As Integer = 0 To 5
            If CBool(index Mod 2) Then
                dataGridView1.Rows.Add(False, "0")
            Else
                dataGridView1.Rows.Add(False, "1")
            End If
        Next

    End Sub
End Class