¿Cómo puedo deshabilitar la edición de celdas en una cuadrícula de datos de WPF?

116

Estoy construyendo una cuadrícula de datos en Windows Presentation Foundation y tengo un problema. Cuando un usuario hace doble clic en una celda de mi cuadrícula de datos, la celda entra en modo de edición. Quiero evitar eso. En cambio, quiero que los usuarios puedan seleccionar la fila completa, no editar los valores en ella.

¿Cómo puedo hacer que al hacer doble clic se seleccione la fila completa en lugar de poner la celda en la que se hizo clic en modo de edición?

Pouyan
fuente

Respuestas:

254

El WPF DataGridtiene una IsReadOnlypropiedad que puede configurar Truepara garantizar que los usuarios no puedan editar sus DataGridceldas.

También puede establecer este valor para columnas individuales en su DataGridsegún sea necesario.

Leslie Davies
fuente
1
La cuadrícula está atenuada y se parece más a un estado deshabilitado; no se parece al estado de solo lectura de los winforms.
Buda Florin
3
Estoy de acuerdo con Buda Florin. Establecerlo en ReadOnly hace que parezca más como si estuviera deshabilitado. Disabled y ReadOnly son diferentes porque ReadOnly normalmente le permite seleccionar el texto para copiar. Cuando configura DataGrid para que sea de solo lectura, ya no puede seleccionar texto en las celdas.
Nick
2
@LeslieDavies, ¿qué pasa si quiero mantenerlos deshabilitados, pero también quiero poder eliminar elementos de la cuadrícula de datos cuando presiono SUPR?
Roxy'Pro
@ Roxy'Pro, tengo la misma pregunta. ¿Encontraste una solución?
Patrick
45

DataGrid tiene una propiedad XAML IsReadOnlyque puede establecer en true:

<my:DataGrid
    IsReadOnly="True"
/>
Stephen
fuente
3

Si desea deshabilitar la edición de la cuadrícula completa, puede establecer IsReadOnly en verdadero en la cuadrícula. Si desea deshabilitar al usuario para agregar nuevas filas, establezca la propiedad CanUserAddRows = "False"

<DataGrid IsReadOnly="True" CanUserAddRows="False" />

Además, puede configurar IsReadOnly en columnas individuales para deshabilitar la edición.

VivekDev
fuente
2

Veo a los usuarios en los comentarios preguntándose cómo deshabilitar la edición de celdas mientras se permite la eliminación de filas: logré hacer esto configurando todas las columnas individualmente para solo lectura, en lugar del DataGrid en sí.

<DataGrid IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True"/>
        <DataGridTextColumn IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>
Célia
fuente