我希望能够设置DataGrid行的背景。
我的第一个想法是这样做:
//MapDisplay is a DataGrid
SolidColorBrush myBrush = new SolidColorBrush(Colors.Red);
mapDisplay.RowBackground = myBrush;
现在,这可行,但它将为DataGrid中的每一行设置背景。 我的下一个想法是这样做:
SolidColorBrush myBrush = new SolidColorBrush(Colors.Red);
foreach (DataGridRow x in mapDisplay.Items)
{
x.Background = myBrush;
}
然而,这并不会导致任何行'要改变的背景,所以我认为我做了一些根本错误的事情。如何正确遍历DataGrid的行以设置背景?
答案 0 :(得分:0)
你的问题被标记为WPF,这是winforms答案......
DataGridView行使用行模板(DataGridViewCellStyle类)设置样式。
下面是一个用于将行添加到网格的拼接代码段组。 theGrid是我们添加行的控件。事件是从db返回的POCO。
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应该有某种样式应用于行。添加存储行模板的表单属性,然后根据条件更新rowCellStyle。
答案 1 :(得分:0)
要更改特定行的背景,需要根据其DataContext
或其index
的某个值获取该行。
然后将Trigger/DataTrigger
应用于RowStyle
。
以编程方式,您可以使用以下内容DataGridRow
获取Item
DataGridRow row = (DataGridRow) mapDisplay.ItemContainerGenerator.ContainerFromItem(item);
mapDisplay.Items
会为您提供有限项目列表,这些项目可以是Map objects
,也可以是Employee
个对象。
和ContainerFromIndex() method
基于索引。
现在,修改代码,
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;
}
}