C# 如何在数据网格上绘制线条
如何在数据网格上绘制一条线,我试着这样做,但不起作用。 “row”变量始终为null或C# 如何在数据网格上绘制线条,c#,wpf,C#,Wpf,如何在数据网格上绘制一条线,我试着这样做,但不起作用。 “row”变量始终为null或 private void PersonData() { foreach (SingleEstoqueEntrada item in DataGridEstoque.ItemsSource) { try { var row = DataGridEstoque.ItemContainer
private void PersonData()
{
foreach (SingleEstoqueEntrada item in DataGridEstoque.ItemsSource)
{
try
{
var row = DataGridEstoque.ItemContainerGenerator.ContainerFromIndex(I) as DataGridRow;
if (item.ESTOQUE == 0.00m)
row.Background = Brushes.Pink;
else
row.Background = Brushes.YellowGreen;
}
catch (Exception _Exception)
{
MessageBox.Show(_Exception.Message);
}
}
}
试一试
而不是
var row = DataGridEstoque.ItemContainerGenerator.ContainerFromIndex(I) as DataGridRow;
如果数据被正确绑定,并且有一个前面提到的属性
ESTOQUE
(也是从代码中假定的),那么将此样式放置在参考资料中可能会产生预期的效果
<Style TargetType="DataGridRow">
<Setter Property="Background"
Value="YellowGreen" />
<Style.Triggers>
<DataTrigger Binding="{Binding ESTOQUE}"
Value="0">
<Setter Property="Background"
Value="Pink" />
</DataTrigger>
</Style.Triggers>
</Style>
样本xaml
<DataGrid>
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Setter Property="Background"
Value="YellowGreen" />
<Style.Triggers>
<DataTrigger Binding="{Binding}"
Value="item 1">
<Setter Property="Background"
Value="Pink" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding}"
Header="A Column" />
<DataGridTextColumn Binding="{Binding Length}"
Header="Length" />
</DataGrid.Columns>
<sys:String>item 1</sys:String>
<sys:String>item 2</sys:String>
<sys:String>item 1</sys:String>
<sys:String>item 2</sys:String>
<sys:String>item 2</sys:String>
<sys:String>item 2</sys:String>
</DataGrid>
项目1
项目2
项目1
项目2
项目2
项目2
结果
在上面的示例中,我编写了触发器来修改所有包含
项目1
的行,这些行可能完全没有@DJKRAZE的副本。这是winforms,这里是wpf。@user3270570-你把代码放在哪里了?只有在UI上呈现行时才会生成行。如果将此代码放在UserControl/Window的构造函数中,它将不起作用。使用DataTemplate.Triggers可以轻松完成此操作。共享你的模板我们可以看一下。Rohit上面提到的:在控件加载之前,项目不在那里。尝试将此代码放入Loaded()处理程序中。
<DataGrid>
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Setter Property="Background"
Value="YellowGreen" />
<Style.Triggers>
<DataTrigger Binding="{Binding}"
Value="item 1">
<Setter Property="Background"
Value="Pink" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding}"
Header="A Column" />
<DataGridTextColumn Binding="{Binding Length}"
Header="Length" />
</DataGrid.Columns>
<sys:String>item 1</sys:String>
<sys:String>item 2</sys:String>
<sys:String>item 1</sys:String>
<sys:String>item 2</sys:String>
<sys:String>item 2</sys:String>
<sys:String>item 2</sys:String>
</DataGrid>