如何在 DataGridView 中禁用或隐藏按钮

Posted

技术标签:

【中文标题】如何在 DataGridView 中禁用或隐藏按钮【英文标题】:How to Disable or Hide Button in DataGridView 【发布时间】:2017-07-14 19:37:45 【问题描述】:

您好,我想隐藏或禁用第三列中的按钮,我打算在每次单击时添加行。麻烦的是,以前的按钮是活动的,可以添加行。如何将按钮仅放在最后一行?

这是我的工作代码:

    Private Sub dgAppliances_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgAppliances.CellContentClick
    If e.ColumnIndex <> 2 Then
        Exit Sub
    Else
        If Me.dgAppliances.RowCount - 1 = 20 Then
            MsgBox("Maximum of 20 appliances only.")
        Else
            Me.dgAppliances.Rows.Add()
        End If
    End If
End Sub

但是当我添加一些代码时:

    Private Sub dgAppliances_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgAppliances.CellContentClick
    If e.ColumnIndex <> 2 Then
        Exit Sub
    Else
        If Me.dgAppliances.RowCount - 1 = 20 Then
            MsgBox("Maximum of 20 appliances only.")
        Else
            Me.dgAppliances.Rows.Add()
            Dim cell As DataGridViewButtonCell = dgAppliances.Rows(0).Cells(2)
            cell.Value = String.Empty
            cell = New DataGridViewColumn()
            cell.ReadOnly = True
        End If
    End If
End Sub

这行 cell = New DataGridViewColumn() 有错误。

它说,“System.Windows.Forms.DataGridViewColumn”不能转换为“System.Windows.Forms.DataGridViewButtonCell”。

谁能帮我解决这个问题? TIA。

Here's the sample image.

【问题讨论】:

【参考方案1】:

您正在尝试将DataGridViewColumn 分配给DataGridViewButtonCell - 整个 分配给单个单元格

也许您的意图是:cell = New DataGridViewTextBoxCell()?但即便如此,如果你想

仅将按钮放在最后一行

那么你就会遇到Adding Different DataGridView Cell Types to a Column的问题。您可以进行如下所示的转换:

Me.dataGridView1.ColumnCount = 3
Me.dataGridView1.AllowUserToAddRows = False
Me.dataGridView1.AllowUserToDeleteRows = False
Me.dataGridView1.RowCount = 1
Me.dataGridView1(2, 0) = New DataGridViewButtonCell()

Private Sub DataGridView1_CellContentClick(sender As Object, e As DataGridViewCellEventArgs) Handles dataGridView1.CellContentClick
    If TypeOf Me.dataGridView1(e.ColumnIndex, e.RowIndex) Is DataGridViewButtonCell Then
        If Me.dataGridView1.RowCount - 1 = 20 Then
            MessageBox.Show("Maximum of 20 appliances only.")
        Else
            Me.dataGridView1.Rows.Add()
            Me.dataGridView1(e.ColumnIndex, e.RowIndex) = New DataGridViewTextBoxCell()
            Me.dataGridView1(e.ColumnIndex, e.RowIndex).[ReadOnly] = True
            Me.dataGridView1(e.ColumnIndex, Me.dataGridView1.RowCount - 1) = New DataGridViewButtonCell()
        End If
    End If
End Sub

【讨论】:

哇。你是最好的!!十分感谢你的帮助。 :))) 它有效,我正在努力使前几行删除按钮。 :) 非常感谢,希望你也能帮助我。 :) 在这种情况下,您根本不需要转换单元格。从一开始就将列设为DataGridViewButtonColumn。然后在您的CellContentClick 事件中,如果您单击了DataGridViewButtonCell,请检查它是否是网格中的最后一行。如果是,请添加另一行。如果不是,请删除单击的行。您唯一需要做的就是将按钮文本从“添加”更改为“删除”。 我明白了,先生。再次感谢你。 :))

以上是关于如何在 DataGridView 中禁用或隐藏按钮的主要内容,如果未能解决你的问题,请参考以下文章

在基于导航控制器的应用程序的最终视图中隐藏或禁用后退按钮

如何:禁用 Windows 窗体 DataGridView 控件的按钮列中的按钮

如何禁用在 DataGridView 中选择的能力?

隐藏/显示和启用/禁用按钮?

winform dataGridView中如何添加单选按钮列?

如何在实现屏幕录制时隐藏按钮或 textView