DataGrid - Formatierung einzelner Zellen

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von E.T..

    DataGrid - Formatierung einzelner Zellen

    Ich bin neu in WPF und versuche seit einiger Zeit bekannte Vorgehensweisen aus den Formsanwendungen mit DataGridView neu unter WPF mit DataGrid umzusetzen.
    Mir DataBinding habe ich auch einen Teil erfolgreich umgesetzt. Aber nun habe ich ein Problem, mit dem ich einfach nicht weiterkomme:

    Ich hatte ein Tool programmiert, mit welchem unser Produktmanagement viele Artikelpflegeaufgaben, wie z.B. Preisänderungen komfortabel in Exceltabellen ausführt.
    Diese werden in meinem Tool eingelesen, ursprünglich in ein DataGrieView und in die Datenbank übertragen.
    Vor der Übergabe an die Datenbank werden die Daten intensiv geprüft, um Fehler zu vermeiden.
    Z.B. die erste Prüfung: Ist die Artikelnummer überhaupt vorhanden.
    Gibt es im DataGrid eine Artikelnummern, die gar nicht vorhanden ist (eventuell Tippfehler), wird mit dem Einlesen gar nicht erst begonnen.
    Die falsche Artikelnummer wird gekennzeichnet und es erfolgt eine Fehlermeldung.
    Im DataGridview konnte ich nun ganz einfach die betreffende Zelle mit einer Hintergrundfarbe versehen. Im WPF DataGrid gestaltet sich das schwierig.
    Auch mit DataBinding und eventuellen Triggern komme ich nicht weite, da sich ja der Inhalt der Zelle nicht ändert. Hab's mit allen möglichen Ansätzen versucht, z.B.
    MultiValueConverter: Da wird immer die ganze Zeile eingefärbt. Das ist unerwünscht, weil ja jede Spalte separat nach anderen Kriterien geprüft wird.

    Hat jemand irgendeine Idee, wie, man das umsetzen könnte?
    Der angehängte Screenshot enthält mal die Ansicht aus dem alten Tool mit DataGridView.
    Bilder
    • ArtikelTools.jpg

      222,78 kB, 1.259×724, 68 mal angesehen
    Ich glaube, nach langem Probieren habe ich jetzt eine halbwegs akzeptable Lösung gefunden:
    Ich weise nach der Prüfung den betreffenden Spalten der DataTable eine zusätzliche Spalte mit der Zellfarbe zu.
    Das Datagrid bekommt DataGridTemplateColumns mit <DataGridTemplateColumn.CellTemplate>
    Der Text bekommt die Bindung an die Datentabelle und der Background bekommt die Bindung an die zusätzlichen Formatspalten der DataTable.

    Ich bin nicht sicher, ob das eine elegante Lösung ist, aber es funktioniert erst mal.

    Für andere Vorschläge wäre ich dankbar.
    Ja genau. Die Information zur Farbe muss als erstes im Datensatz iwie vorhanden gemacht werden.

    Ich halte aber eine zusätzliche DataColumn für ungünstig, weil die würde ja iwann mit abgespeichert.
    Im CodeBehind eines typdatasets kann man ja enorm viel machen.
    Ein anderer Ansatz wäre was mit einem ValueConverter.
    Aber um iwas vorzuschlagen müsste ich selbst damit herum-experimentieren.
    Vor allem weil Wpf und Dataset so schlecht zusammen-arbeiten - das wird alles noch unintuitiver als es eh schon ist.
    Ja, mit ValueConverter habe ich auch schon experimentiert (auch MultiValueConverter). Da kriegte ich aber die Kurve nicht zu den einzelnen DataGriedCells. Hat mir immer die gesamte Spalte markiert.
    Eventuell müsste man das ebenso mit den DataGridTemplateColumns kombinieren. Das schau ich mir auf Fälle noch mal an.
    Hab auch schon an eine 2. Datatable gedacht, die nur die Farbinfos enthält.