Bagaimana cara menonaktifkan pengeditan sel di WPF Datagrid?

116

Saya sedang membangun datagrid di Windows Presentation Foundation, dan saya punya masalah. Ketika pengguna mengklik dua kali pada sel di datagrid saya, sel masuk ke mode edit. Saya ingin mencegah itu. Sebaliknya, saya ingin pengguna dapat memilih baris lengkap - bukan mengedit nilai di dalamnya.

Bagaimana cara membuatnya sehingga klik dua kali memilih baris penuh alih-alih meletakkan sel yang diklik dalam mode edit?

Pouyan
sumber

Jawaban:

255

WPF DataGridmemiliki IsReadOnlyproperti yang dapat Anda atur Trueuntuk memastikan bahwa pengguna tidak dapat mengedit DataGridsel Anda.

Anda juga dapat mengatur nilai ini untuk setiap kolom DataGridsesuai kebutuhan Anda.

Leslie Davies
sumber
1
Kisi berwarna abu-abu dan lebih terlihat seperti dalam keadaan tidak aktif - tidak menyerupai keadaan hanya baca dari bentuk win.
Buda Florin
3
Saya setuju dengan Buda Florin. Menyetelnya ke ReadOnly membuatnya tampak lebih seperti dinonaktifkan. Disabled dan ReadOnly berbeda karena ReadOnly biasanya memungkinkan Anda memilih teks untuk disalin. Saat Anda menyetel DataGrid menjadi ReadOnly, Anda tidak lagi dapat memilih teks di sel.
Nick
2
@LeslieDavies bagaimana jika saya ingin tetap menonaktifkannya, tetapi saya juga ingin dapat menghapus item dari datagrid ketika saya menekan DEL?
Roxy'Pro
@ Roxy'Pro, saya memiliki pertanyaan yang sama. Apakah Anda menemukan solusinya?
Patrick
45

DataGrid memiliki properti XAML IsReadOnlyyang dapat Anda atur ke true:

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

Jika Anda ingin menonaktifkan pengeditan seluruh kisi, Anda dapat menyetel IsReadOnly ke true di kisi. Jika Anda ingin menonaktifkan pengguna untuk menambahkan baris baru, Anda menyetel properti CanUserAddRows = "False"

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

Lebih jauh lagi, Anda dapat mengatur IsReadOnly pada kolom individual untuk menonaktifkan pengeditan.

VivekDev
sumber
2

Saya melihat pengguna di komentar bertanya-tanya bagaimana cara menonaktifkan pengeditan sel sambil mengizinkan penghapusan baris: Saya berhasil melakukan ini dengan mengatur semua kolom satu per satu menjadi hanya baca, alih-alih DataGrid itu sendiri.

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