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?
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.
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.
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.