6

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

4

3 回答 3

8

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

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);
于 2010-08-09T01:13:52.777 回答
3

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

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

您可以使按钮列不可见。

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

于 2010-06-04T18:59:04.970 回答
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-12-29T20:03:31.437 回答