none
Spalten und Zeilen des DataGrids ansprechen RRS feed

  • Frage

  • Hallo Zusammen.

    Ich wollte /bzw. habe  ein Dategrid erstellt. Nun möchte ich aber auch auf bestimmte Zeilen und Spalten zugreifen um z.B. die Farbe zu ändern.
    In VB ging das ja so:

    ...
     dgvAnzeige.Rows(j).Cells(i).Style.BackColor = Color.DarkGray
    ...


    Wie mache ich so etwas aber in Silverlight?

    Zudem konnte man in VB über den ColorTranslator ja Farbewerte umwandeln. Aber auch diesen gibt es nicht in Silverlight.
    Weiß auch hier vllt. jmd wie das nun in Silverlight von statten geht?

    Danke für eure Hilfe :-)

    grüße
    Dienstag, 8. Dezember 2009 14:37

Antworten

  • Du gehts in die Spalte, dort weiter zum Datenobjekt (=Zeile), holst dir den Zellinhalt (=Zellobjekt) und weist diesem neue Eigenschaftswerte zu, z.B. Background, z.B. so:

        CType(Me.dg.Columns(2).GetCellContent(CType(Me.dg.ItemsSource, List(Of C1)).Item(1)), TextBox).Background = New SolidColorBrush(Colors.DarkGray)

    --
    Peter

    Montag, 14. Dezember 2009 03:56
  • C1 ist mein Datenobjekt. Anstelle List(Of C1) müsstest du den Typ deiner Datenobjekt-Auflistung, die an das Grid gebunden ist, angeben.

    --
    Peter
    Dienstag, 15. Dezember 2009 07:05
  • Ein Typecasting benötigt den Typ und nicht ein Objekt. Das ist der erste Fehler bei CType(Me.dgv.ItemsSource, Source).

    Das zweite Problem besteht darin, dass du die Hintergrundfarbe eines TextBlockes ändern willst. Ein TextBlock hat keine Background-Eigenschaft. In meinem Beispiel habe ich für das DataTemplate im CellTemplate eine TextBox genutzt, die eine Background-Eigenschaft hat. Vermutlich hast du dort ein TextBlock-Objekt angewandt. Ändere das mal.

    --
    Peter
    Dienstag, 15. Dezember 2009 20:21
  • Also nochmal. Du nutzt in den Zellen deines Grid TextBlocks. Da geht natürlich kein Typcasting auf TextBox. Deshalb kommt der Fehler. Entweder du nutzt über DataTemplate im CellTemplate TextBoxes, die eine Background-Eigenschaft besitzen, oder du nutzt das Parent (DataGridCell), wa auch eine Background-Eigenschaft hat.

    Du kannst die mal eine Demo dazu auf meiner Homepage unter http://www.informtools.de/kb.aspx?id=387 anschauen.

    -- 
    Peter 
    Mittwoch, 16. Dezember 2009 19:13
  • Halo Peter.

    Ich habe es nun  geschafft. Das Beispiel war dabei sehr hilfreich. Vielen Dank für deine Hilfe :-).

    Wünsche allen schöne Weihnachten und besinnliche Feiertage.

    gruß
    • Als Antwort markiert ThunderBold Dienstag, 22. Dezember 2009 09:49
    Dienstag, 22. Dezember 2009 09:49

Alle Antworten

  • Du gehts in die Spalte, dort weiter zum Datenobjekt (=Zeile), holst dir den Zellinhalt (=Zellobjekt) und weist diesem neue Eigenschaftswerte zu, z.B. Background, z.B. so:

        CType(Me.dg.Columns(2).GetCellContent(CType(Me.dg.ItemsSource, List(Of C1)).Item(1)), TextBox).Background = New SolidColorBrush(Colors.DarkGray)

    --
    Peter

    Montag, 14. Dezember 2009 03:56
  • Morgen Peter.

    Danke erstmal für die Antwort.

    Also soweit habe ich es verstanden wie funktionieren soll.
    Da die Anweisung im CurrentCellChanged Event ausgeführt werden soll weiß ich nun nicht genau was das Objekt in der Liste sein soll (bei Dir das C1)?

    CType(Me.dg.Columns(2).GetCellContent(CType(Me.dg.ItemsSource, List(Of C1 )).Item(1)), TextBox).Background = New SolidColorBrush(Colors.DarkGray)


    Könntest Du mir dies noch erklären?

    Danke
    Dienstag, 15. Dezember 2009 06:39
  • C1 ist mein Datenobjekt. Anstelle List(Of C1) müsstest du den Typ deiner Datenobjekt-Auflistung, die an das Grid gebunden ist, angeben.

    --
    Peter
    Dienstag, 15. Dezember 2009 07:05
  • OK, ich habe es erst so Versucht:

    ...
     Dim Source As List(Of Farbe) = New List(Of Farbe)

    ...

    CType(Me.dgv.Columns(2).GetCellContent(CType(Me.dgv.ItemsSource, Source).Item(1)), TextBox).Background = New SolidColorBrush(Colors.DarkGray)
    ...

    Jedoch sagt er mir hier das "Source" nicht definiert wäre..


    Dann habe ich es so geschrieben:

    ...
    CType(Me.dgv.Columns(2).GetCellContent(CType(Me.dgv.ItemsSource, List(Of Farbe)).Item(1)), TextBox).Background = New SolidColorBrush(Colors.DarkGray)
    ...

    Wenn ich es nun ausführe bringt er mir folgenden Fehler:

    Das Objekt des Typs System.Windows.Controls.TextBlock kann nicht in Typ System.Windows.Controls.TextBox umgewandelt werden.


    Habe ich etwas falsch gemacht oder kann man die Hintergrundfarbe einzelner Zellen vllt. gar nicht ändern?

    TB


    Dienstag, 15. Dezember 2009 09:11
  • Ein Typecasting benötigt den Typ und nicht ein Objekt. Das ist der erste Fehler bei CType(Me.dgv.ItemsSource, Source).

    Das zweite Problem besteht darin, dass du die Hintergrundfarbe eines TextBlockes ändern willst. Ein TextBlock hat keine Background-Eigenschaft. In meinem Beispiel habe ich für das DataTemplate im CellTemplate eine TextBox genutzt, die eine Background-Eigenschaft hat. Vermutlich hast du dort ein TextBlock-Objekt angewandt. Ändere das mal.

    --
    Peter
    Dienstag, 15. Dezember 2009 20:21
  • Hallo Peter.

    Ah ok, das war natürlich mein Fehler...

    Nein leider nicht , ich habe es direkt ausm Code kopiert. Hier nochmals ganz:

    Private Sub dgv_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv.CurrentCellChanged 
    
    CType(Me.dgv.Columns(2).GetCellContent(CType(Me.dgv.ItemsSource, List(Of Farbe)).Item(1)), TextBox).Background 
    = New SolidColorBrush(Colors.DarkGray) End Sub
    Und dann erhalte ich wie oben schon geschrieben diesen Fehler:

    Das Objekt des Typs System.Windows.Controls.TextBlock kann nicht in Typ System.Windows.Controls.TextBox umgewandelt werden.
    Mittwoch, 16. Dezember 2009 06:37
  • Also nochmal. Du nutzt in den Zellen deines Grid TextBlocks. Da geht natürlich kein Typcasting auf TextBox. Deshalb kommt der Fehler. Entweder du nutzt über DataTemplate im CellTemplate TextBoxes, die eine Background-Eigenschaft besitzen, oder du nutzt das Parent (DataGridCell), wa auch eine Background-Eigenschaft hat.

    Du kannst die mal eine Demo dazu auf meiner Homepage unter http://www.informtools.de/kb.aspx?id=387 anschauen.

    -- 
    Peter 
    Mittwoch, 16. Dezember 2009 19:13
  • Halo Peter.

    Ich habe es nun  geschafft. Das Beispiel war dabei sehr hilfreich. Vielen Dank für deine Hilfe :-).

    Wünsche allen schöne Weihnachten und besinnliche Feiertage.

    gruß
    • Als Antwort markiert ThunderBold Dienstag, 22. Dezember 2009 09:49
    Dienstag, 22. Dezember 2009 09:49