如何隐藏 DataGridViewButtonCell

How to hide a DataGridViewButtonCell

我的 DataGridView 中有一个 DataGridViewButtonCell,我想将 属性 Visible 设置为 True

我试过:

DataGridView1.Rows("number of row i want").Cells("number of cell i want").Visible = True

不幸的是,它说 属性 visibleread only

这是代码:

Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
        'does not work
        DataGridView1.Rows(e.RowIndex).Cells(6).Visible = True         
End Sub

有谁知道我怎样才能做到这一点?

谢谢。

没有隐藏 DataGridViewButtonCell 的实际方法。目前我只能看到两个选项:

  1. 使用填充将按钮移动到如图所示 here。我会提供类似的VB.NET代码
  2. Cell 设置为 DataGridViewTextBoxCell 并将 ReadOnly 属性 设置为 True

使用Padding:

Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    If DataGridView1.Rows(e.RowIndex).Cells(6).GetType() Is GetType(DataGridViewButtonCell) Then
        Dim columnWidth As Integer = DataGridView1.Columns(e.ColumnIndex).Width

        Dim newDataGridViewCellStyle As New DataGridViewCellStyle With {.Padding = New Padding(columnWidth + 1, 0, 0, 0)}

        DataGridView1.Rows(e.RowIndex).Cells(6).Style = newDataGridViewCellStyle
    End If
End Sub

使用DataGridViewTextBoxCell:

Private Sub DataGridView1_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellClick
    If DataGridView1.Rows(e.RowIndex).Cells(6).GetType() Is GetType(DataGridViewButtonCell) Then
        Dim newDataGridViewCell As New DataGridViewTextBoxCell

        DataGridView1.Rows(e.RowIndex).Cells(6) = newDataGridViewCell

        newDataGridViewCell.ReadOnly = True
    End If
End Sub

这两个应该给你不显示按钮的效果。

这真是一个视角问题。从程序员的角度来看,简单地忽略按钮点击我想禁用的按钮是很容易做到的,只需要几行代码。

从用户的角度来看,这种情况会像这样发生……用户单击似乎是有效启用的按钮,但没有任何反应。用户没有为此编写代码......所以用户充其量会认为计算机没有响应按钮点击或在最坏的情况下......会认为你的编码技能值得怀疑!

如果按钮丢失,也会出现同样的情况。用户不会知道为什么它不见了......但很可能会得出与上述相同的结论,但按钮不起作用。

在另一种非常简单的方法中,假设所有按钮都已启用,并且我们有一个要禁用的按钮索引列表。用户按下其中一个按钮,我们检查禁用按钮列表,如果单击的按钮是禁用的,则只显示一个消息框以指示为什么禁用此按钮。这种方法对用户说……“这是一堆按钮,猜猜哪些是启用的”……

DataGridViewDisableButtonCellDataGridViewDisableButtonColumn 包装器解决了上述所有问题……按钮是可见的,因此如果您将按钮设置为不可见且呈灰色,则用户不会质疑按钮去了哪里。 “灰显”是大多数用户都理解的东西,它将使用户不​​必“猜测”启用了哪些按钮。

您可以为两个 类 创建包装器:DataGridViewButtonCell 和 DataGridViewButtonColumn。

MS 示例的 link How to: Disable Buttons in a Button Column in the Windows Forms DataGridView Control 是我在使用 C# 之前使用过的示例,但是在 link 中也有一个 VB 实现。

下面是使用 MS link 中描述的两个包装器的结果图片。为了进行测试,下图使用按钮左侧的复选框来禁用右侧的按钮。

恕我直言,使用此策略对用户友好。如果您只是让按钮不可见或只读,那么用户可能会认为您的代码一团糟,并且不清楚为什么按钮丢失或不起作用。禁用按钮向用户指示该按钮对于该项目不可用。一个选项是让鼠标悬停指示按钮被禁用的原因。