locked
DataGrid - mehrere Rows validieren RRS feed

  • Frage

  • Hallo,

    ich hab ein Dialog (ChildWindow) welches ein DataGrid enthält das an eine ObserveableCollection gebunden ist.

    Nun möchte ich das beim Klick auf den OK-Button *ALLE* Rows validiert werden und ggf. an jeder Row der Fehler angezeigt wird (Roter Border/Tooltip als Fehler)...
    Es soll also nicht eine einzelne Row nach dem Editeren oder Wechseln auf eine andere Row validiert werden...

    Wie kann ich das am einfachsten realisieren? Irgendwelche Ideen...

    Gruß
    Jo

    Donnerstag, 13. Januar 2011 13:56

Alle Antworten

  • In deinen Anzeigedaten (Item in der ObserveableCollection) könntest du eine CheckMethode implementieren, die von die definierte Regeln überprüft.
    Wenn Regeln verstoßen, wirfst du jeweils Exceptions dafür. Wenn du das hast dann kannst du beim Ok Klick die OC durchlaufen und die Check-Methode aufrufen.

    Hier ein Beispiel für DataGrid Validierung:

    http://blogs.msdn.com/b/nagasatish/archive/2009/03/22/datagrid-validation.aspx

    Donnerstag, 13. Januar 2011 15:04
    Beantworter
  • Hallo ClassMP2002,

    vielen Dank für die Antwort. Würde die Exception aber nicht dann im OK-Button Click-Handler auftreten wenn ich dort die OC durchlaufe und jeweils die Check-Methode aufrufe?

    Ich hatte auch schon mal z.B. ein CustomValidator ausprobiert und es hat prinzipiell funktioniert, das nach dem Editieren dann die Zeile validiert wurde und ggf. als fehlerhaft markiert hatte, aber das will ich ja nicht...

    Hintergrund ist folgender, das nicht in jeder Zeile ein Wert eingegeben werden muss, und es soll auch nicht beim Eingeben validiert werden. Sondern erst auf Klick des OK-Button und falls Fehler aufgetreten sind, soll der Dialog nicht geschlossen werden, sondern in die 1. Zeile bei der ein Fehler aufgetreten ist gesprungen werden. Die anderen Zeile, welche fehlerhaft sind, sollten aber dennoch visuell mit einem roten Rahmen versehen werden, damit der Benutzer sieht in welchen Zeilen noch was eingegeben werde muss.

    ____

    Edit:

    Bin jetzt mal hergegangen und hab in meinem ItemModel (in den Anzeigedaten der OC) das CustomValidation-Attribute angegeben und eine dazugehörige statische CustomValidator-Klasse erzeugt. Dann hab ich eine Validate() implementiert, welche vom OK-Button aus für jedes Item der OC aufgerufen wird. Dort rufe ich Validator.ValidateObject() auf und er validiert jedes Objekt.

    Allerdings erzeugt er mir nun eine ValidationException (mit Text des ValidationResults) sobald ich im CustomValidator ein ValidationResult und nicht ValidationResult.Success zurückgebe...

    Donnerstag, 13. Januar 2011 16:12