【问题标题】:Datagridview, disable button/rowDatagridview,禁用按钮/行
【发布时间】:2010-06-04 18:48:52
【问题描述】:

我在带有一些数据的表单上有一个 datagridview。第一列包含用于删除行的按钮。我们如何根据某些条件禁用此按钮或整行,从而无法删除该行?

【问题讨论】:

标签: winforms button datagridview delete-row


【解决方案1】:

您是否考虑只将按钮单元格变为禁用的常规空文本框?

Dim cell As DataGridViewButtonCell = dgv.row(x).cell(y)
cell = New DataGridViewTextBoxCell()
cell.value = String.Empty
cell.ReadOnly = True

它失去了带边框的“按钮”外观并与其余单元格融合在一起(假设您主要使用默认的 DataGridViewTextBoxCells)。

这是 C# 中的等价物,加上它使该字段变灰以使其看起来是只读的:

var cell = dgv[column, row] = new DataGridViewTextBoxCell();
cell.Value = ""; // ignored if this column is databound
cell.ReadOnly = true;
cell.Style.BackColor = Color.FromKnownColor(KnownColor.Control);

【讨论】:

    【解决方案2】:

    实际上,MSDN 上有一个 HowTo 就是这样做的。

    编辑:添加了一些其他建议。

    您可以使按钮列不可见。

    或者,如果您只想禁用删除某些行,您可以在每个 DataGridViewRows Tag 属性中输入 true 或 false,并且在您的按钮事件处理程序中,您只删除设置为 false 的行。您可以将其与仅更改单元格的前景色和背景色相结合以使其看起来被禁用,这种着色可能在 CellFormatting 事件处理程序或其他东西中完成,这样您就不必循环和着色手动的。

    【讨论】:

    • 我以前见过,但一定有更好的方法。
    • @BhejaFry:嗯,很多代码都是为了让它看起来正确。如果您不关心还有很多其他方法,我会在我的答案中添加一些建议,因为那里更容易阅读。
    【解决方案3】:

    这是一篇旧帖子,但我想建议我做什么。

    If conditionToDisable Then
       Dim cell As New DataGridViewTextBoxCell   'Replace the ButtonCell for a TextCell'
       cell.Value = valueForCell                 'Set the value again'
       grid.Rows(r).Cells(c) = cell              'Override the cell'
    End If
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2012-09-13
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多