wpf datagrid: Erstellen Sie eine DatagridNumericColumn in wpf

7

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.

    
Mussammil 15.10.2013, 06:19
quelle

5 Antworten

14

Basierend auf dem @ nit-Vorschlag können Sie Ihre eigene Klasse erstellen, die wie folgt von DataGridTextColumn abgeleitet ist:

%Vor%

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

    
Omri Btian 15.10.2013, 07:30
quelle
3

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.

%Vor%

und in PreviewTextInput des TextBox-Satzes e.Handled = true , wenn der Wert nicht ganzzahlig ist:

%Vor%     
Nitin 15.10.2013 06:34
quelle
3

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:

  1. Fügen Sie für den DataGrid einen Ereignishandler für PreparingForCellEdit hinzu.
  2. In diesem Event-Handler den EditingElement auf einen TextBox umwandeln und einen Event-Handler für PreviewTextInput zum TextBox .
  3. hinzufügen
  4. Setzen Sie im 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:

  1. Fügen Sie dem DataGrid für PreviewTextInput .
  2. einen Event-Handler hinzu
  3. In diesem Event-Handler wird 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 .

    
Brian Watt 05.04.2014 14:05
quelle
1

Verwenden Sie stattdessen TryParse , dies hilft, Eingabewerte auf ganze Zahlen zu beschränken.

%Vor%     
Ankush Madankar 15.09.2015 12:05
quelle
1

Um @ Omribitans Antwort zu erweitern, hier ist die Lösung mit einem Data Paste guard hinzugefügt:

%Vor%     
Yoav 16.03.2016 11:15
quelle

Tags und Links