【发布时间】:2010-06-04 18:48:52
【问题描述】:
我在带有一些数据的表单上有一个 datagridview。第一列包含用于删除行的按钮。我们如何根据某些条件禁用此按钮或整行,从而无法删除该行?
【问题讨论】:
标签: winforms button datagridview delete-row
我在带有一些数据的表单上有一个 datagridview。第一列包含用于删除行的按钮。我们如何根据某些条件禁用此按钮或整行,从而无法删除该行?
【问题讨论】:
标签: winforms button datagridview delete-row
您是否考虑只将按钮单元格变为禁用的常规空文本框?
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);
【讨论】:
实际上,MSDN 上有一个 HowTo 就是这样做的。
编辑:添加了一些其他建议。
您可以使按钮列不可见。
或者,如果您只想禁用删除某些行,您可以在每个 DataGridViewRows Tag 属性中输入 true 或 false,并且在您的按钮事件处理程序中,您只删除设置为 false 的行。您可以将其与仅更改单元格的前景色和背景色相结合以使其看起来被禁用,这种着色可能在 CellFormatting 事件处理程序或其他东西中完成,这样您就不必循环和着色手动的。
【讨论】:
这是一篇旧帖子,但我想建议我做什么。
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
我希望这会有所帮助。
【讨论】: