Как отключить редактирование ячеек в WPF Datagrid?


116

Я создаю сетку данных в Windows Presentation Foundation, и у меня возникла проблема. Когда пользователь дважды щелкает ячейку в моей сетке данных, ячейка переходит в режим редактирования. Я хочу предотвратить это. Вместо этого я хочу, чтобы пользователи могли выбирать всю строку, а не редактировать в ней значения.

Как я могу сделать так, чтобы двойной щелчок выделял всю строку вместо того, чтобы переводить нажатую ячейку в режим редактирования?

Ответы:


255

WPF DataGridимеет IsReadOnlyсвойство, которое вы можете установить, Trueчтобы пользователи не могли редактировать ваши DataGridячейки.

При необходимости вы также можете установить это значение для отдельных столбцов в вашем DataGrid.


1
Сетка неактивна и больше похожа на отключенное состояние - не похоже на состояние только для чтения из winforms.
Буда Флорин

3
Я согласен с Будой Флорином. Установка его на ReadOnly делает его больше похожим на отключение. Disabled и ReadOnly отличаются, потому что ReadOnly обычно позволяет выбирать текст для копирования. Когда вы устанавливаете DataGrid как ReadOnly, вы больше не можете выделять текст в ячейках.
Ник

2
@LeslieDavies, что если я хочу, чтобы они были отключены, но я также хочу иметь возможность удалять элементы из таблицы данных, когда я нажимаю DEL?
Roxy'Pro 06

@ Roxy'Pro, у меня такой же вопрос. Вы нашли решение?
Патрик

45

DataGrid имеет свойство XAML IsReadOnly, для которого можно задать следующие значения true:

<my:DataGrid
    IsReadOnly="True"
/>

3

Если вы хотите отключить редактирование всей сетки, вы можете установить для IsReadOnly значение true в сетке. Если вы хотите запретить пользователю добавлять новые строки, вы устанавливаете свойство CanUserAddRows = "False"

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

Более того, вы можете установить IsReadOnly для отдельных столбцов, чтобы отключить редактирование.


2

Я вижу пользователей в комментариях, которые задаются вопросом, как отключить редактирование ячеек, разрешив удаление строк: мне удалось это сделать, установив для всех столбцов индивидуально только чтение, а не сам DataGrid.

<DataGrid IsReadOnly="False">
    <DataGrid.Columns>
        <DataGridTextColumn IsReadOnly="True"/>
        <DataGridTextColumn IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.