WinForms:no se puede editar una columna de DataGridView

WinForms:no se puede editar una columna de DataGridView

Problema

Está usando un DataGridView y no puede editar una o más de las columnas. Cuando hace clic en una celda, solo se resalta y no ingresa al modo de edición.

Compruebe si su cuadrícula, columna o propiedad enlazada son de solo lectura. Si alguno de estos es de solo lectura, no podrá editar los valores en la columna.

Solución

Caso 1:DataGridView es de solo lectura

Lo primero que debe hacer es verificar si la cuadrícula es de solo lectura. Si es de solo lectura, no podrá editar ninguna de las columnas. Establezca la propiedad ReadOnly de la cuadrícula en falso.

Nota:marcar "Habilitar edición" hace lo mismo (se vincula a la propiedad de solo lectura).

Si eso se ve bien, verifique si su código está configurando programáticamente ReadOnly en algún lugar.

Caso 2:la columna es de solo lectura

Si agregó la columna manualmente a través de la interfaz de usuario o mediante programación (en lugar de que las columnas se generen automáticamente), verifique si la columna es de solo lectura. Establezca la propiedad ReadOnly de la columna en false.

Verifique el código para ver si está configurando la propiedad ReadOnly en algún lugar.

Caso 3:la columna está vinculada a una propiedad con un setter no público

Para hacer que una columna sea editable, debe vincularse a una propiedad con un setter público. Si la propiedad tiene un setter no público, hace que la columna sea de solo lectura.

Aquí hay un ejemplo. Digamos que está vinculado a una lista de recetas y la clase Receta tiene la siguiente definición:

public class Recipe
{
	public string Name { get; set; }
	public int Meals { get; internal set; }
}
Code language: C# (cs)

La propiedad Meals tiene un setter no público. Por lo tanto, la columna Comidas será de solo lectura y no podrá editarla. Hacer público el setter:

public class Recipe
{
	public string Name { get; set; }
	public int Meals { get; set; }
}
Code language: C# (cs)

Caso 4:algún controlador de eventos impide que se confirme la edición

Si aún no puede editar la columna, verifique si tiene un controlador de eventos que interfiere con las ediciones.

Este es solo uno de los muchos ejemplos posibles. Supongamos que tiene el siguiente controlador de eventos CellValidating, que condicionalmente llama a CancelEdit():

private void recipeGrid_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
        //some conditional logic
	recipeGrid.CancelEdit();
}
Code language: C# (cs)

Digamos que la lógica condicional es defectuosa, de modo que siempre resulta en llamar a CancelEdit(). En este escenario, podrá ingresar nuevos valores, pero siempre volverá al valor anterior. En otras palabras, puede ingresar al modo de edición, pero no puede editar.


No