none
Dynamisches Datagrid per Quellcode färben RRS feed

  • Frage

  • Hallo Leute,

    wie der Name schon sagt habe ich ein Problem beim Einfärben eines dynamisch erzeugten Datagrids.

    Die Vorlage für das Dataset liefert ein statisches Dataset (Planung.xsd) welches um eine variable Anzahl an Spalten (in meinem Fall Kalenderwochen) ergänzt wird und anschließend dem Datagrid zugewiesen wird:

    DataGrid1.ItemsSource = DSPlanung.Tables("PlanungDT")

     

    In den Spalten "Kalenderwochen" befinden sich Integerwerte. Nun möchte ich die Zelle einfärben wenn der Integerwert z.B. kleiner als 0 ist.

     

    Als Ausgangsbasis habe ich folgende Lösung implementiert:

    http://social.msdn.microsoft.com/Forums/en/wpf/thread/28b6750b-d715-474f-b5b8-a2c6653ea6ca

     

    Wie schaffe ich es nun den Converter (MyBkColorConverter) auf meine dynamisch erzeugten Spalten anzuwenden? Bei den per XAML statisch erzeugten Spalten funktiert es einwandfrei (sogar wenn Werte aus den Spalten Kalenderwochen als Vergleichswert herangezogen werden).

    Folgender Abschnitt müßte angepasst werden:

        <DataGrid AutoGenerateColumns="True" Margin="0,103,0,1" Name="DataGrid1" CanUserAddRows="False" CanUserResizeRows="False">
        
          <DataGrid.Columns>        
            <DataGridTextColumn Binding="{Binding Date}" Width="100" Header="Date">
              <DataGridTextColumn.CellStyle>
                <Style TargetType="{x:Type DataGridCell}">
                  
                  <Setter Property="Background">
                    <Setter.Value>
                      <Binding Converter="{StaticResource bkColorCvrt}"/>
                    </Setter.Value>
                  </Setter>
                  
                </Style>            
              </DataGridTextColumn.CellStyle>          
            </DataGridTextColumn>        
          </DataGrid.Columns>
          
        </DataGrid>
    

    Kann mir jemand bei dem Problem helfen?

    Vielen Dank vorab!!

     

    H.S.

    Donnerstag, 13. Januar 2011 13:47

Antworten

Alle Antworten

  • Hast du es schonmal mit DataTriggern versucht?

    Hier ein ungetestetes Beispiel:

    <Style TargetType="{x:Type DataGridCell}">
        <Style.Triggers>
            <DataTrigger Binding={Binding Kalenderwoche}" Value="0">
                <Setter Property="Background" Value="Red"/>
         </DataTrigger>
        </Style.Triggers>
    </Style>    

    Donnerstag, 13. Januar 2011 13:58
    Beantworter
  • Hallo ClassMP2002,

    ich hatte bisher mit DataTriggern noch nichts zu tun .. Kannst du mir einen guten Link als Einstieg in die Thematik empfehlen?

    Gruß,

    H.S.

     

     

    PS: Es muß doch eine einfache Möglichkeit à la Datagrid bei Windows Forms geben ...

    If sGrid.Rows(i).Cells(j).Value < 0 then

    sGrid.Rows(i).Cells(j).Style.BackColor = Color.Red

    End If
    Donnerstag, 13. Januar 2011 14:02
  • Ein Ziel bei WPF (in Verbindung mit dem MVVM Muster) ist es keine Logik im CodeBehind zu hinterlegen.
    DataTrigger sind deshalb für die Änderung des Aussehens in Abhängigkeit der Daten der erste Lösungansatz.

    Hier ein paar Links zu dem Thema:

    http://en.csharp-online.net/WPF_Styles_and_Control_Templates%E2%80%94Data_Triggers
    http://msdn.microsoft.com/en-us/library/ms752347.aspx

     

    Donnerstag, 13. Januar 2011 14:22
    Beantworter