Hallo an alle,
ich habe vor, csv dateien in ein datagrid zu laden. Das mache ich per drag & drop und das funktioniert auch wunderbar. Hierzu verwende ich als itemssource eine datatable, weil ich nicht weiß, wie viel Spalten in der Datei vorhanden sind. Mein Problem ist nun, dass ich die Daten anschließend validieren möchte, und bei fehlerhaften Zellen das auch farblich im datagrid darstellen möchte. Da aber die Datarow nur strings und keine eigenen objekte akzeptiert, habe ich nun das Problem, diese Zellen mittels einem Flag isValid zu kennzeichnen. Ich habe keine Idee wie ich das umsetzen kann und bin für jeden Ansatz dankbar.
Die Überprüfung findet im ViewModel statt, sollte als mvvm pattern sein.
Eine Möglichkeit, wenn auch nicht schön, wäre z.B. bei DataRow die Methode SetColumnError dafür zu verwenden.
Dann kannst du z.B. mit HasErrors prüfen ob es in der Zeile Fehler gibt.
Alternativ müsstest du sonst ein eigenes Tracking umsetzen.
Im einfachsten Fall reicht dann z.B. ein Dictionary mit row/column Index als Key und bool als Value.
Solange die Daten im Grid nicht umsortiert oder gefiltert werden, sind die Keys dann auch fix.
Falls doch, wäre das Tracking schwieriger.
Doku:
https://learn.microsoft.com/de-de/dotnet/api/system.data.datarow.getcolumnsinerror?view=net-7.0
Nachtrag:
Wenn möglich wäre eine saubere Datenstruktur einem DataTable vorzuziehen.
DataTables sind ziemliche Speicherfresser und sehr unflexibel.
Wenn die CSV Dateien einen identischten Aufbau haben, leg die eine passende Klasse an und verwendet eine Liste als Datenquelle.
Dann brauchst du nur eine IsValid Property in deiner Klasse um dein Ziel zu erreichen.
T-Virus
Developer, Developer, Developer, Developer....
99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
Hallo T-Virus und danke für deine Antwort.
Die Möglichkeit mit SetColumnError finde ich jetzt auch nicht schön.
Ich habe schon gelesen dass hierfür auch das ObservableCollection-Objekt genommen wird, aber da bräuchte ich ne Liste in ner Liste.
Es gibt schon auch eine Schnittstellenbeschreibung, wie die CSV-Dateien auszusehen haben. Allerdings halten sich da nicht alle dran, und so kommt es vor, dass zusätzliche Spalten vorhanden sind die da einfach nicht hingehören. Die sollen bei der Validierung dann auch ignoriert werden.
Aber eine dynamische Darstellung von Tabellen sollte schon möglich sein, um sie dann validieren zu können.
Ich werde mal weiter rechechieren und testen, vielleicht finde ich ja eine Lösung die auch nicht zu komplex ist, denn das Vorhaben ist ja eigentlich einfach.
Sollte ich was finden, werde ich es hier reinsetzen.