我在包含一些数据的表单上有一个datagridview。第1列包含用于删除行的按钮。如何根据某些条件禁用此按钮或整行,以便无法删除该行?
答案 0 :(得分:8)
您是否会考虑将按钮单元格禁用为常规空文本框?
Dim cell As DataGridViewButtonCell = dgv.row(x).cell(y)
cell = New DataGridViewTextBoxCell()
cell.value = String.Empty
cell.ReadOnly = True
它失去了它的边界“Button”外观并与其余的单元格混合(假设你主要使用默认的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);
答案 1 :(得分:3)
MSDN上实际上有HowTo正是这样做的。
编辑:添加了一些其他建议。
您可以使按钮列不可见。
或者,如果您只想禁用某些行的删除,可以在每个DataGridViewRow
s Tag
属性和按钮事件处理程序中输入true或false,只删除那些设置为假。您可以将此与仅更改单元格的前景色和背景色相结合以使其看起来处于禁用状态,这种着色可能可以在CellFormatting
事件处理程序中完成,以便您无需循环并手工着色。
答案 2 :(得分: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
我希望这有用。