Ich habe eine Anforderung, dass ich eine Datagrid-Spalte erstellen möchte, die nur numerische Werte (Ganzzahl) akzeptiert, wenn der Benutzer etwas anderes als Nummern mit dem Textfeld eingibt. Ich habe viele Webseiten ausprobiert, ich bin müde von diesen, ich schätze sehr, dass jemand den helfenden Verstand hat.
Basierend auf dem @ nit-Vorschlag können Sie Ihre eigene Klasse erstellen, die wie folgt von DataGridTextColumn
abgeleitet ist:
In der PrepareCellForEdit -Methode registrieren Sie die OnPreviewTextInput
Methode zum Bearbeiten TextBox
PreviewTextInput -Ereignis, wo Sie validieren für numerische Werte.
In xaml verwendest du es einfach:
%Vor%Hoffe, das hilft
Wenn Sie keine Validierungsfehler anzeigen möchten und nur einen nicht numerischen Wert blockieren möchten, können Sie den DataGridTemplateColumn
und in CellEditingTemplate
den TextBox
erstellen.
und in PreviewTextInput
des TextBox-Satzes e.Handled = true
, wenn der Wert nicht ganzzahlig ist:
Ich habe hier nach einer Lösung für das gleiche Problem gesucht: die Eingabe in Zellen in DataGrid
zu beschränken, um numerisch zu sein. Aber die akzeptierte Antwort funktionierte nicht für mich. Folgendes tat:
DataGrid
einen Ereignishandler für PreparingForCellEdit
hinzu. EditingElement
auf einen TextBox
umwandeln und einen Event-Handler für PreviewTextInput
zum TextBox
. PreviewTextInput
-Ereignishandler e.Handled
auf "true", wenn die Eingabe nicht zulässig sein soll. Die obigen Schritte funktionieren, wenn der Benutzer auf die zu bearbeitende Zelle klickt. Wenn sich die Zelle jedoch nicht im Bearbeitungsmodus befindet, wird das Ereignis PreparingForCellEdit
nicht aufgerufen. Um die Validierung in diesem Fall durchzuführen:
DataGrid
für PreviewTextInput
. e.OriginalSource
sicher auf DataGridCell
geworfen (das heißt, wenn es kein DataGridCell
ist), check die DataGridCell's
IsEditing
-Eigenschaft, und wenn die Zelle nicht editiert ist, setzen Sie e.Handled
zu wahr. Der Effekt des Obigen ist, dass der Benutzer in die Zelle klicken muss, um seinen Inhalt zu bearbeiten, und somit wird die obige Kombination PreparingForCellEdit
/ PreviewTextInput
für alle Änderungen am Inhalt der Zelle aufgerufen .
Verwenden Sie stattdessen TryParse
, dies hilft, Eingabewerte auf ganze Zahlen zu beschränken.
Tags und Links wpf c# validation datagrid