2011-05-17 66 views
5

Mi datagridview tiene una columna de casilla de verificación que solo es válida para algunos registros en los datos que se muestran. Para los registros para los cuales una casilla de verificación no es válida, no deseo mostrar nada: un cuadro de texto en blanco, por ejemplo.Convertir un tipo de celda DataGridView en tiempo de ejecución

Por lo tanto, necesito cambiar dinámicamente el tipo de celda en tiempo de ejecución de una casilla de verificación a una casilla de texto. No puedo simplemente cambiar el tipo de datos de la columna ya que la columna necesita tener una mezcla de tipos de celda de cuadros de texto y casillas de verificación.

Hasta ahora tengo el siguiente código.

this.deviceList1.DeviceGrid[colIndex, rowIndex] = new KryptonDataGridViewTextBoxCell() 
this.deviceList1.DeviceGrid[colIndex, rowIndex].ReadOnly = true; 

howver esto genera un error de datos DataGridView:

System.FormatException: Formatted value of the cell has a wrong type.

+0

Ah, la solución es garantizar que la propiedad Value tenga el valor adecuado. Es decir, debe establecerse en un valor de cadena. this.deviceList1.DeviceGrid [colIndex, rowIndex] .Value = ""; – Kildareflare

Respuesta

6

Ordenado. Simple en realidad. La solución es garantizar que la propiedad Value tenga un valor apropiado. Es decir, debe establecerse en un valor de cadena.

this.deviceList1.DeviceGrid[colIndex, rowIndex] = new KryptonDataGridViewTextBoxCell() 
this.deviceList1.DeviceGrid[colIndex, rowIndex].ReadOnly = true; 
this.deviceList1.DeviceGrid[colIndex, rowIndex].Value = ""; 
0

Se puede usar el controlador de eventos OnPaint de la celda en cuestión y dibujar un cuadrado en blanco sobre el control. Es un poco hacky y estoy seguro de que hay otras opciones, pero funciona.

Cuestiones relacionadas