Come posso disabilitare la modifica delle celle in un Datagrid WPF?


116

Sto costruendo un datagrid in Windows Presentation Foundation e ho un problema. Quando un utente fa doppio clic su una cella nel mio datagrid, la cella entra in modalità di modifica. Voglio impedirlo. Invece voglio che gli utenti siano in grado di selezionare l'intera riga, non di modificare i valori in essa.

Come posso fare in modo che il doppio clic selezioni l'intera riga invece di mettere la cella su cui si è fatto clic in modalità di modifica?

Risposte:


255

Il WPF DataGridha una IsReadOnlyproprietà che puoi impostare Trueper assicurarti che gli utenti non possano modificare le tue DataGridcelle.

Puoi anche impostare questo valore per le singole colonne nel tuo DataGridcome necessario.


1
La griglia è in grigio e sembra più simile a uno stato disabilitato - non è simile allo stato di sola lettura delle forme di Windows.
Buda Florin

3
Sono d'accordo con Buda Florin. Impostarlo su ReadOnly fa sembrare che sia disabilitato. Disabled e ReadOnly sono diversi perché ReadOnly normalmente ti consente di selezionare il testo da copiare. Quando si imposta il DataGrid per essere ReadOnly, non è più possibile selezionare il testo nelle celle.
Nick

2
@LeslieDavies e se voglio mantenerli disabilitati, ma voglio anche essere in grado di rimuovere elementi da datagrid quando premo CANC?
Roxy'Pro

@ Roxy'Pro, ho la stessa domanda. Hai trovato una soluzione?
Patrick

45

DataGrid ha una proprietà XAML IsReadOnlyche puoi impostare su true:

<my:DataGrid
    IsReadOnly="True"
/>

3

Se vuoi disabilitare la modifica dell'intera griglia, puoi impostare IsReadOnly su true sulla griglia. Se vuoi disabilitare l'utente per aggiungere nuove righe, imposta la proprietà CanUserAddRows = "False"

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

Inoltre, puoi impostare IsReadOnly su singole colonne per disabilitare la modifica.


2

Vedo utenti nei commenti che si chiedono come disabilitare la modifica delle celle consentendo la cancellazione delle righe: sono riuscito a farlo impostando tutte le colonne individualmente in sola lettura, invece del DataGrid stesso.

<DataGrid IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True"/>
        <DataGridTextColumn IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.