Не могли бы вы просто отключить ячейку кнопки в обычное пустое текстовое поле?
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);