Jak mogę wyłączyć edytowanie komórek w WPF Datagrid?

116

Konstruuję datagrid w Windows Presentation Foundation i mam problem. Gdy użytkownik kliknie dwukrotnie komórkę w moim datagrid, komórka przechodzi w tryb edycji. Chcę temu zapobiec. Zamiast tego chcę, aby użytkownicy mogli wybrać pełny wiersz - a nie edytować w nim wartości.

Jak mogę to zrobić, aby dwukrotne kliknięcie zaznaczało cały wiersz zamiast przełączać klikniętą komórkę w tryb edycji?

Pouyan
źródło

Odpowiedzi:

255

WPF DataGridma IsReadOnlywłaściwość, którą można ustawić, Trueaby upewnić się, że użytkownicy nie mogą edytować DataGridkomórek użytkownika.

W DataGridrazie potrzeby możesz również ustawić tę wartość dla poszczególnych kolumn w swoim .

Leslie Davies
źródło
1
Siatka jest wyszarzona i wygląda bardziej jak w stanie wyłączonym - nie przypomina stanu tylko do odczytu z winforms.
Buda Florin
3
Zgadzam się z Budą Florin. Ustawienie go na ReadOnly sprawia, że ​​wygląda bardziej tak, jakby był wyłączony. Disabled i ReadOnly są różne, ponieważ ReadOnly zwykle umożliwia zaznaczenie tekstu do skopiowania. Po ustawieniu DataGrid na ReadOnly nie można już zaznaczać tekstu w komórkach.
Nick
2
@LeslieDavies A co jeśli chcę, aby były wyłączone, ale chcę też mieć możliwość usuwania elementów z datagrid po naciśnięciu DEL?
Roxy'Pro
@ Roxy'Pro, mam to samo pytanie. Znalazłeś rozwiązanie?
Patrick,
45

DataGrid ma właściwość XAML IsReadOnly, którą można ustawić na true:

<my:DataGrid
    IsReadOnly="True"
/>
Stephen
źródło
3

Jeśli chcesz wyłączyć edytowanie całej siatki, możesz ustawić IsReadOnly na true w siatce. Jeśli chcesz uniemożliwić użytkownikowi dodawanie nowych wierszy, ustaw właściwość CanUserAddRows = "False"

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

Co więcej, możesz ustawić IsReadOnly na poszczególnych kolumnach, aby wyłączyć edycję.

VivekDev
źródło
2

Widzę w komentarzach użytkowników, którzy zastanawiają się, jak wyłączyć edycję komórek, jednocześnie zezwalając na usuwanie wierszy: udało mi się to zrobić, ustawiając wszystkie kolumny indywidualnie jako tylko do odczytu, zamiast samego DataGrid.

<DataGrid IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True"/>
        <DataGridTextColumn IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>
Célia
źródło