Ocultar alguma célula da caixa de seleção do datagridview

eu tenho umdatagridview mostrando parcelas de um empréstimo. Eu criei umdatagridviewcheckbox coluna então eu posso selecionar todas as parcelas que eu quero pagar.

Esta é uma tela do datagrid:

Meu problema é que preciso desabilitar as caixas de seleção das instalações pagas. Neste caso, quando "Restante" (o que resta a pagar) é= 0.

Eu li alguns posts onde eles usaram o evento de pintura para não mostrar a célula da caixa de seleção, mas eu não gostei dessa solução. Pensei em esconder a célula da caixa de seleção, mas não sei se é possível fazer isso.

Isso é o que eu tentei:

foreach (DataGridViewRow row in dgv_Cuotas.Rows)
            {
                if (Convert.ToDecimal(dgv_Cuotas.Rows[row.Index].Cells[17].Value) == 0)
                {
                    dgv_Cuotas.Rows[row.Index].Cells[16].Visible = false;
                }
            }

Obviamente isso não funciona, recebo uma mensagem de erro do compilador dizendo que a propriedade é somente leitura.

Alguém sabe como definir a célula da caixa de seleção como invisível?

Apenas no caso, eu prendo oDataGridViewCheckboxColumn código de criação:

DataGridViewCheckBoxColumn chbox = new DataGridViewCheckBoxColumn();
            {
                chbox.CellTemplate = new DataGridViewCheckBoxCell();
                chbox.HeaderText = "";
                chbox.Name = "Seleccionar";
                chbox.AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells;
                chbox.FlatStyle = FlatStyle.Standard;
            }
            dgv_Cuotas.Columns.Insert(16, chbox);
            dgv_Cuotas.Columns[16].DisplayIndex = 0;

EDITAR:

Algumas considerações:

Eu uso o evento de clique de conteúdo de célula para manipular as caixas de seleção, portanto, readonly não funcionará. O que eu quero é esconder a caixa de seleção:

private void dgv_Cuotas_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.RowIndex == -1)
            return;
        if (dgv_Cuotas.Columns[e.ColumnIndex].Name == "Seleccionar")
        {
            DataGridViewRow row = dgv_Cuotas.Rows[e.RowIndex];
            DataGridViewCheckBoxCell cellSeleccion = row.Cells["Seleccionar"] as DataGridViewCheckBoxCell;
            int n_cuota = Convert.ToInt32(dgv_Cuotas[2, dgv_Cuotas.CurrentRow.Index].Value);
            Cuota cuota_seleccionada = new Cuota();
            cuota_seleccionada = Lista_cuotas.Where(x => x.num_cuota == n_cuota).First();

            if (cellSeleccion != null && Convert.ToBoolean(cellSeleccion.Value) == true)
            {
                cellSeleccion.Value = false;
                Actualizar_cuotas_seleccionadas(false, cuota_seleccionada);
            }
            else
            {
                if (cellSeleccion != null && Convert.ToBoolean(cellSeleccion.Value) == false)
                {
                    cellSeleccion.Value = true;
                    Actualizar_cuotas_seleccionadas(true, cuota_seleccionada);
                }
            }
        }

Por outro lado, já estou usando o evento Onpaint. É herdado, é por isso que estou tentando evitar usá-lo.

questionAnswers(8)

yourAnswerToTheQuestion