Laden...

DataGrid Rows durchlaufen und Zellen bei Differenzen markieren

Erstellt von oehrle vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.459 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
DataGrid Rows durchlaufen und Zellen bei Differenzen markieren

Hallo, ich arbeite mich nun auch in WPF ein. Jetzt habe ich eine Anwendung nachgebaut, die zuvor in WinForm erstellt wurde. Ich übergebe daten aus einer dataTable in ein DataGrid. Die Tabelle hat drei Spalten (Bezeichnung, spalte1, spalte2).

Wenn die Daten über dataContext an das dataGrid übergeben wurden, möchte ich jede Row im DataGrid ab Row[1] durchlaufen, und die Werte von spalte1 mit spalte2 vergleichen. Bei Differenzen solleb beide Zellen (also spalte1 + spalte2) rot markiert werden.


 DataGrid dg = new DataGrid();
            dg.ItemsSource = tbl.DefaultView;
 
            for(int m = 1; m < dg.Items.Count; m++)
            {
                dg.Items.MoveCurrentToNext();
                DataGridRow dgrow = dg.Items[m] as DataGridRow ;
               
            }

Leider ist erstmal meine dgrow immer null. Wie muss ich das angehen?

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

wenn du mit der DataView arbeitest, dann sind da keine DataGridRows drin, sondern DataRowViews.

Dein Ansatz ist aber schon nicht gut. Wieso willst du dir aus der GUI umständlich die Daten zurückholen wenn du sie im Code eh schon direkt vorliegen hast in vor der DataTable? Mach dort direkt die Vergleichsoperationen und such in der GUI dann über den ItemsContainerGenerator des DataGrids das entsprechende Element wo das Datum drin ist und ändern dann für diese den Background auf Rot.

Baka wa shinanakya naoranai.

Mein XING Profil.

T
146 Beiträge seit 2004
vor 13 Jahren

Der Ansatz ist absolut falsch! So macht man das in WPF nicht, machte man aber auch in WinForms schon nicht mehr.

1tens: Wie talla sagte, arbeite mit den Daten, nicht mit der UI.

2tens: Erstelle dir ein Bool in deiner Datenklasse, dass dir sagt, ob die beiden Werte gleich sind.

3tens: Binde deinen RowBackground via Converter an dieses Bool und setze damit deine Farbe.

Oder du machst es via ValidationExceptions.

Aber: Gewöhne dir schnell ab, auf diese Weise mit WPF arbeiten zu wollen, damit wirst du dir bald denken: Wie umständlich das doch ist, obwohls ja viel einfacher ginge.

Ein tolles Beispiel, warum man so nicht arbeitet bietet das TreeView Control. Spätestens dort stößt du an eine beinharte Grenze.

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
zusätzliche Boolean - Spalte

Hallo, habe das erst mal eingefügt, um in der DataTable die Rows zu kennzeichnen, welche später farblich hervorgehoben werden müssen.

dann habe ich vorerst mal das DataGrid.loadingRow-Event aktiviert, bei der ich dann die Rows einzeln beim Laden abfange und dann die Background-Farbe setzte. Ich muss mir das von euch beiden genau ansehen, das macht die Sache schon einfacher. Aber mein Manko ist, das diese Dinge in meinem Programm dynamisch erstellt werden (im C# Code) und ich somit auch diese Dinge in C# codieren muss. Diese Anzeigegeschichte könnte ich evtl. aber auch in XAML machen, muss ich nochmal durchprüfen.