2008-09-16 18 views
5

Estoy usando .NET Windows Forms DataGridView y necesito editar una columna DataBound (que se una en una columna booleana DataTable). Para esto especifico la plantilla de la celda como esta:La columna DataGridView del tipo DataGridViewCheckBoxCell está constantemente readonly/disabled

DataGridViewColumn column = new DataGridViewColumn (new DataGridViewCheckBoxCell());

Ve que necesito una plantilla de celda CheckBox.

El problema al que me enfrento es que esta columna se lee/deshabilita constantemente, como si fuera de tipo TextBox. No muestra una casilla de verificación en absoluto.

¿Alguna idea sobre cómo trabajar con columnas editables de casilla de verificación para DataGridView?

Actualización: Para formularios de Windows, por favor.

Gracias.

Respuesta

0

Crear un TemplateField y encuadernado el id a él, algo como esto:

<asp:TemplateField HeaderText="Whatever" SortExpression="fieldname" ItemStyle-HorizontalAlign="Center"> 
    <ItemTemplate> 
     <asp:CheckBox runat="server" ID="rowCheck" key='<%# Eval("id") %>' /> 
    </ItemTemplate> 
</asp:TemplateField> 
+0

me olvidó especificar que necesito la respuesta para Windows Forms. Gracias. –

+0

Lo siento, me he perdido ese punto. – Biri

1

En lugar de tratar de crear la columna en el código, haga clic en la flecha pequeña en una caja en la parte superior derecha de la DataGridView control, y seleccione "Editar columnas ..." en el menú que aparece. En el cuadro de diálogo, haga clic en el botón Agregar, luego elija la opción "Columna de datos enlazados" y seleccione la columna booleana a la que se está vinculando.

+0

Sí, eso hubiera sido una solución, tal vez, pero en mi caso las columnas se agregaron programáticamente. –

6

Bueno, después de más de 4 horas de depuración, descubrí que la altura de la fila DataGridView era demasiado pequeña para que la casilla de verificación se pintara, por lo que no se visualizó en absoluto. Lo encontré después de un cambio accidental de altura de fila.

Como solución, puede establecer AutoSizeRowsMode en AllCells.

richDataGrid.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.AllCells;

+0

marque su respuesta como aceptada. – JPReddy

Cuestiones relacionadas