2016-09-17 2 views
0

Ich möchte den Hintergrund einer DataGrid-Zeile festlegen können.Wie durchquert man ein DataGrid in C#?

Mein erster Gedanke war, dies zu tun:

//MapDisplay is a DataGrid 
SolidColorBrush myBrush = new SolidColorBrush(Colors.Red); 
mapDisplay.RowBackground = myBrush; 

Nun, dies funktioniert, aber es wird den Hintergrund für jede Zeile in dem Datagrid gesetzt. Mein nächster Gedanke war, dies zu tun:

SolidColorBrush myBrush = new SolidColorBrush(Colors.Red); 
foreach (DataGridRow x in mapDisplay.Items) 
{ 
    x.Background = myBrush; 
} 

Dies gilt jedoch nicht dazu führen, jede der Hintergründe Zeilen zu ändern, so dass ich nehme an, ich bin etwas grundlegend falsch. Wie durchquere ich die Zeilen eines DataGrids ordnungsgemäß, um den Hintergrund festzulegen?

+0

Fragetitel und doesnt Frage Anforderung Spiel. – AnjumSKhan

Antwort

0

Ihre Frage ist WPF markiert, ist dies die WinForms beantworten ...

Datagridview-Zeilen werden gestylt mit Zeilenvorlagen (DataGridViewCellStyle Klasse).

Im Folgenden finden Sie eine zusammengesetzte Codefragmentgruppe zum Hinzufügen von Zeilen zu einem Raster. theGrid ist das Steuerelement, dem Zeilen hinzugefügt werden. Event ist ein POCO, das von der Datenbank zurückgegeben wird.

   var rowCellStyle = new DataGridViewCellStyle(theMessagesGrid.DefaultCellStyle) 
       { 
        BackColor = string.IsNullOrEmpty(conditions) 
          ? theGrid.DefaultCellStyle.BackColor 
          : theColor, 
        SelectionForeColor = Color.WhiteSmoke, 
        SelectionBackColor = theGrid.DefaultCellStyle.SelectionBackColor, 
       }; 

      var theRow = new DataGridViewRow 
       { 
        Height = theGrid.RowTemplate.Height, 
        DefaultCellStyle = rowCellStyle, 
        Tag = Event.GroupName 
       }; 

      theRow.CreateCells(theGrid); 
      var cellData = new object[theRow.Cells.Count]; 

      // fill out cell data 
      cellData[0] = ...; 
      cellData[1] = ... 
      theRow.SetValues(cellData); 

      // add row to grid 
      try 
      { 
       theGrid.Rows.Add(theRow); 
       if (currentMsg == Event.Pkey) theGrid.Rows[theGrid.Rows.Count - 1].Selected = true; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message, @"Error Building Grid", MessageBoxButtons.OK, MessageBoxIcon.Warning); 
       throw; 
      } 

WPF sollte eine Art von Styling haben, um auf Zeilen anzuwenden. Fügen Sie Formulareigenschaften hinzu, die Ihre Zeilenvorlagen speichern, und aktualisieren Sie dann den rowCellStyle basierend auf den Bedingungen.

0

Um den Hintergrund einer bestimmten Zeile zu ändern, muss diese Zeile basierend auf einem Wert von DataContext oder index abgerufen werden.

Dann wenden Sie Trigger/DataTrigger an Ihre RowStyle.

Programmatically, können Sie DataGridRow basierend auf Item erhalten mit:

DataGridRow row = (DataGridRow) mapDisplay.ItemContainerGenerator.ContainerFromItem(item); 

mapDisplay.Items wird Ihnen Liste der beschränkten Elemente, die Map objects oder allgemein Employee Objekte sein können.

und ContainerFromIndex() method basierend auf Index.

Und nun, Korrektur in Ihrem Code,

foreach (object o in mapDisplay.Items) 
    { 
     Map m = o as Map; 
     if (m == null) break; 

     if (m.AreaCode == 1234) 
     { 
      DataGridRow row = (DataGridRow)mapDisplay.ItemContainerGenerator.ContainerFromItem(m); 
      row.Background = Brushes.Yellow; 
     } 
    }