2012-06-29 13 views
11

Estoy creando un simple DataGridView con una columna de casilla de verificación y una columna de texto (más columnas seguirán, pero este es el ejemplo de trabajo mínimo que estoy tratando de poner en práctica). Cuando ejecuto este código, aparecen las columnas de la casilla de verificación, pero no puedo marcar las casillas.No se puede marcar la casilla en DataGridViewCheckBoxColumn?

DataGridViewCheckBoxColumn checkColumn = new DataGridViewCheckBoxColumn(); 
checkColumn.ThreeState = false; 
checkColumn.Width = 20; 

MyDataGridView.Columns.Add(checkColumn); 
MyDataGridView.Columns.Add(new DataGridViewTextBoxColumn()); 

Como no aparece nada en este caso, pensé en agregar algunos datos ficticios.

for (int i = 0; i < 10; i++) 
{ 
    MyDataGridView.Rows.Add(new Object[] { true, "test"}); 
} 

Normalmente, el DataGridView se rellena con los datos ligados de una lista de objetos personalizados, como en this question of mine, pero pensé que sería mejor para conseguir este trabajo de una manera básica antes de continuar.

No estoy tratando de establecer el estado comprobado mediante programación, sino que dejo que el usuario seleccione y luego use esa selección en varios otros manejadores de eventos.

+1

Es usted la creación cualquier otra propiedad en su DataGridView? Simplemente intenté ejecutar este código y los cuadros aparecen marcados, y se pueden borrar usando el mouse de la forma habitual. Tal vez hayas desactivado la edición en otro lugar de tu código. – andypaxo

+0

Al estar conectado con @andypaxo, este código funciona bien de fábrica en una nueva aplicación de WinForms, por lo que el problema debe estar en algún lugar del contexto. Proporcione más información/código. – Alan

+0

puede publicar el código en el archivo 'designer.cs' que crea la columna DataGridView y CheckBox para que podamos decirle cuál es incorrecto. Ta –

Respuesta

26

El código parece estar bien, así que sólo puedo decir para verificar y asegurar que las siguientes DataGridView propiedades se establecen correctamente: ReadOnly conjunto de False y Enabled conjunto de True.

+3

Estabas en lo cierto; Me faltaba un código de mi muestra, ya que parte de él aún permanecía en el diseñador. La propiedad 'ReadOnly' fue el problema. –

+1

Me sucedió hace mucho tiempo ... de alguna manera cambié esa propiedad en el diseñador y resultó en una pérdida total de tiempo hasta que descubrí la clave. –

+1

me pasó lo mismo ahora. Realmente me ayudó también. Cambié esta propiedad y ahora enfrenté demasiado problema y mucha pérdida de tiempo –

1

Esto puede ocurrir también cuando se rellenan de la DataGridView con un objeto, que tiene public Boolean property (el CheckBox en el DataGridView) que tiene un ter private set. Una columna en el DataGridView que representa esta propiedad (de solo lectura) es de solo lectura automáticamente ya que no se le permite establecer la propiedad externamente (= fuera del código del objeto).

public class ExampleObject 
{ 
    /// <summary> 
    /// A public property that can only be read. 
    /// When a DataGridViewRow is populated with this object, the column representing this Boolean property is automatically read-only. 
    /// </summary> 
    public Boolean QCPassed 
    { 
     get; 
     private set; 
    } 
} 
2

Sólo cambia la propiedad de sólo lectura de DataGridView

 MyDataGridView.ReadOnly = false; 
+0

Esto no funciona :( – Hari

1

también tuve el mismo problema con diferentes situaciones Mi DataGridView estaba destinado a un DataTable que fue ocupado por un SqlDataReader (que es de sólo lectura) Reemplacé SqlDataReader con SqlDataAdapter funciona bien.

DataTable dt=new DataTable(); 
SqlDataAdapter da=new SqlDataAdapter("Select <column_names> from <table_name>",con); 
da.Fill(dt); 
0

La tabla en sí puede establecerse en sólo lectura a pesar de que la columna de la casilla de verificación no es el ajuste de la tabla anulará el ajuste de la columna.

3

he tenido el mismo problema, la solución para mí era cambiar la

"Modo Edición" de "EditProgramatically" en el valor por defecto de "EditOnKeystrokeOrF2",

esta solucionado mi problema .

Todas las sugerencias anteriores ya se han implementado.

Saludos cordiales Heider

Cuestiones relacionadas