Announcement

Collapse
No announcement yet.

WPF - DataGrid-Zellen formatieren per code-behind

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • WPF - DataGrid-Zellen formatieren per code-behind

    Hallo,

    ich habe ein DataGrid, in dem ich Differenzen von Tabellen ausgebe, also z.B.

    Server Spalte1 Spalte2 Spalte3 usw.
    A 1 4 'Hallo'
    B 1 5 'Hallo'

    Bei Start des Programms steht nicht fest, welche Tabelle geprüft wird, also wieviele Spalten das Grid haben wird und wie die Spalten heißen. Je Differenz werden immer zwei Zeilen ausgegeben, für jeden Server eine.
    Nun möchte ich gern die Differenzen markieren, die Schrift fett machen oder die BackgroundColor ändern. Oben im Beispiel also die 4 und die 5. Aber wie? Ich komme einfach nicht auf die Zellen.

    Ich kann in der Datasource die entsprechenden "Zellen" der ItemCollection ermitteln, komme aber von dort nicht auf die entsprechenden DataGridCells. Und im DataGrid wiederum kann ich nicht durch die Zellen iterieren, um die differierenden Werte zu ermitteln. Im Moment stehe ich bei
    [highlight=vbnet]For Each row As DataRowView In grid.ItemsSource
    For Each col As DataGridColumn In grid.Columns
    Dim c As Object = col.GetCellContent(row)
    Next
    Next[/highlight]
    aber c ist immer Nothing. Auch bei[highlight=vbnet]grid.ItemContainerGenerator.ContainerFromItem(grid .Items(0))[/highlight]bekomme ich immer nothing. Was mache ich falsch?

    Bin für jeden Tipp dankbar ...

    Dave

  • #2
    Ist die Schleife evntl einfach nur im falschen Ereignis, soll heissen, schleife wird aufgerufen bevor das grid gefüllt ist?
    Klingt sehr trivial, würde in dem Fall auch nur Flüchtigkeitsfehler annehmen.

    Wie wird das Datagrid befüllt?
    JonDonym: privacy needs anonymity more than ever

    Comment


    • #3
      Ich habe es ewig nicht hinbekommen und dann auch wieder eine Weile liegen lassen. Wie es der Zufall so will, habe ich mich gestern nochmal daran gemacht und es jetzt auf der Basis dieser Infos tatsächlich geschafft. Ist gefühlt irgendwie sehr viel Code für so eine simple Sache, hab's einfach kopiert (Copy&Paste), mein Aufruf sieht nun folgendermassen aus:
      Code:
                  Dim row1 As DataRow : Dim row2 As DataRow
                  Dim cell As DataGridCell
                  Dim bDiffValues As Boolean
                  For i As Integer = 0 To oTabResult.Rows.Count - 1 Step 2
                      row1 = oTabResult.Rows(i)
                      row2 = oTabResult.Rows(i + 1)
      
                      For n As Integer = 0 To oTabResult.Columns.Count - 1
                          bDiffValues = (Not row1(n) Is DBNull.Value And row2(n) Is DBNull.Value) OrElse _
                                        (row1(n) Is DBNull.Value And Not row2(n) Is DBNull.Value) OrElse _
                                        (If(row1(n) Is DBNull.Value, "NULL", row1(n)) <> If(row2(n) Is DBNull.Value, "NULL", row2(n)))
                          If bDiffValues Then
                              cell = GetCell(i, n)
                              cell.Style = styleBold
                              cell = GetCell(i + 1, n)
                              cell.Style = styleBold
                          End If
                      Next
                  Next
      Und nun funktioniert's endlich ...

      Dave

      PS: Ach ja, befüllt wird das Grid per Binding (DataContext) mit einer DataTable.
      PPS: Habe gerade eben z.B. auch nochmal dies ausprobiert, ich erhalte jedoch immer content = null, funktioniert also auch nicht.

      Comment

      Working...
      X