Làm cách nào để vô hiệu hóa việc chỉnh sửa ô trong WPF Datagrid?


116

Tôi đang xây dựng một datagrid trong Windows Presentation Foundation và tôi gặp sự cố. Khi người dùng nhấp đúp vào một ô trong lưới dữ liệu của tôi, ô đó sẽ chuyển sang chế độ chỉnh sửa. Tôi muốn ngăn chặn điều đó. Thay vào đó, tôi muốn người dùng có thể chọn hàng đầy đủ - không chỉnh sửa các giá trị trong đó.

Làm cách nào để nhấp đúp để chọn toàn bộ hàng thay vì đặt ô đã nhấp vào chế độ chỉnh sửa?

Câu trả lời:


254

WPF DataGridcó một thuộc IsReadOnlytính mà bạn có thể đặt Trueđể đảm bảo rằng người dùng không thể chỉnh sửa ô của bạn DataGrid.

Bạn cũng có thể đặt giá trị này cho các cột riêng lẻ trong của bạn DataGridnếu cần.


1
Lưới có màu xám và trông giống như ở trạng thái bị vô hiệu hóa - không giống với trạng thái chỉ đọc từ các biểu mẫu giành chiến thắng.
Buda Florin

3
Tôi đồng ý với Buda Florin. Đặt nó thành ReadOnly làm cho nó giống như bị vô hiệu hóa. Disabled và ReadOnly khác nhau vì ReadOnly thường cho phép bạn chọn văn bản để sao chép. Khi bạn đặt DataGrid thành ReadOnly, bạn không thể chọn văn bản trong ô nữa.
Nick

2
@LeslieDavies thì sao nếu tôi muốn giữ chúng ở chế độ vô hiệu hóa, nhưng tôi cũng muốn có thể xóa các mục khỏi datagrid khi tôi nhấn DEL?
Roxy'Pro

@ Roxy'Pro, tôi có cùng một câu hỏi. Bạn đã tìm thấy một giải pháp?
Patrick

45

DataGrid có thuộc tính XAML IsReadOnlymà bạn có thể đặt thành true:

<my:DataGrid
    IsReadOnly="True"
/>

3

Nếu bạn muốn tắt chỉnh sửa toàn bộ lưới, bạn có thể đặt IsReadOnly thành true trên lưới. Nếu bạn muốn vô hiệu hóa người dùng để thêm hàng mới, bạn đặt thuộc tính CanUserAddRows = "False"

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

Hơn nữa, bạn có thể đặt IsReadOnly trên các cột riêng lẻ để tắt chỉnh sửa.


2

Tôi thấy người dùng trong các nhận xét tự hỏi làm thế nào để tắt tính năng chỉnh sửa ô trong khi cho phép xóa hàng: Tôi đã quản lý để làm điều này bằng cách đặt tất cả các cột riêng lẻ thành chỉ đọc, thay vì chính DataGrid.

<DataGrid IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True"/>
        <DataGridTextColumn IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.