【问题标题】:Add CheckBox To DataGridView Cell Programmatically以编程方式将复选框添加到 DataGridView 单元格
【发布时间】:2021-11-15 00:54:46
【问题描述】:

如果旁边的单元格的值为“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 的单元格旁边添加一个复选框列……您希望复选框单元格做什么?

标签: vb.net checkbox datagridview


【解决方案1】:

这与@miguel 相同,除了检查值,在这种情况下Option Strict 应该是On

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

【讨论】:

    【解决方案2】:

    您要显示复选框的第 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
    

    【讨论】:

      猜你喜欢
      • 2015-04-27
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多