Comment puis-je désactiver la modification des cellules dans une grille de données WPF?

116

Je construis une grille de données dans Windows Presentation Foundation et j'ai un problème. Lorsqu'un utilisateur double-clique sur une cellule de ma grille de données, la cellule passe en mode édition. Je veux empêcher cela. Au lieu de cela, je veux que les utilisateurs puissent sélectionner la ligne complète - pas modifier les valeurs qu'elle contient.

Comment puis-je faire en sorte que des doubles-clics sélectionnent la ligne complète au lieu de mettre la cellule cliquée en mode édition?

Pouyan
la source

Réponses:

255

Le WPF DataGrida une IsReadOnlypropriété que vous pouvez définir pour Truevous assurer que les utilisateurs ne peuvent pas modifier vos DataGridcellules.

Vous pouvez également définir cette valeur pour des colonnes individuelles dans votre DataGridselon vos besoins.

Leslie Davies
la source
1
La grille est grisée et ressemble plus à un état désactivé - ne ressemble pas à l'état en lecture seule des winforms.
Buda Florin
3
Je suis d'accord avec Buda Florin. Le définir sur ReadOnly donne l'impression qu'il est désactivé. Disabled et ReadOnly sont différents car ReadOnly vous permet normalement de sélectionner le texte à copier. Lorsque vous définissez le DataGrid sur ReadOnly, vous ne pouvez plus sélectionner de texte dans les cellules.
Nick
2
@LeslieDavies qu'en est-il si je veux les garder désactivés, mais je veux aussi pouvoir supprimer des éléments de la grille de données lorsque j'appuie sur DEL?
Roxy'Pro
@ Roxy'Pro, j'ai la même question. Avez-vous trouvé une solution?
Patrick
45

Le DataGrid a une propriété XAML IsReadOnlyque vous pouvez définir sur true:

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

Si vous souhaitez désactiver la modification de la grille entière, vous pouvez définir IsReadOnly sur true sur la grille. Si vous souhaitez désactiver l'utilisateur pour ajouter de nouvelles lignes, vous définissez la propriété CanUserAddRows = "False"

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

De plus, vous pouvez définir IsReadOnly sur des colonnes individuelles pour désactiver l'édition.

VivekDev
la source
2

Je vois des utilisateurs dans les commentaires se demander comment désactiver l'édition de cellules tout en autorisant la suppression de lignes: j'ai réussi à le faire en définissant individuellement toutes les colonnes en lecture seule, au lieu du DataGrid lui-même.

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