[英]C# WPF change DataGrid row (background) color based on the data
我有 Datagrid 视图,如下所示: 选择的是“状态”,它有 3 种值(付费、未付费和其他)。 我想根据状态制作每行的背景,如果它是 Unpaid,颜色为红色,如果它 Paid,颜色为绿色,在其他选项中为白色或无颜色。 我从 mysql 数据库中接收数据。 我的数据网格 XML 代码:
<DataGrid HorizontalAlignment="Right" Height="178" FontWeight="Bold" Margin="0,193,63,0" VerticalAlignment="Top" Width="1087" x:Name="FactorGrid" ItemsSource="{Binding LoadDataBinding}" CanUserResizeRows="False" AutoGenerateColumns="False" CanUserAddRows="False" ContextMenuOpening="FactorGrid_ContextMenuOpening">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding id}" Header="شماره صورتحساب" Width="110" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding factorgroup}" Header="گروه" Width="100" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding factortype}" Header="نوع" Width="100" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding amount}" Header="مبلغ" Width="80" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding discount}" Header="تخفیف" Width="80" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding extra}" Header="جریمه" Width="80" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding created_at, ConverterCulture=fa-IR, StringFormat=yyyy/MM/dd}" Header="تاریخ ایجاد" Width="150" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding parent_id}" Header="شماره صورتحساب اصلی" Width="150" IsReadOnly="True" />
<DataGridTextColumn Binding="{Binding status}" Header="وضعیت" Width="150" IsReadOnly="True" />
</DataGrid.Columns>
<DataGrid.ContextMenu>
<ContextMenu>
<MenuItem Header="پرداخت شده" Click="BtnSetPaid">
<MenuItem.Icon>
<Image Width="12" Height="12" Source="img/yes.png"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="پرداخت صورتحساب" Click="BtnAddNewpay_Click">
<MenuItem.Icon>
<Image Width="12" Height="12" Source="img/9999.png"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="حذف" Click="BtnFactorDell">
<MenuItem.Icon>
<Image Width="12" Height="12" Source="img/delete.png"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="قسط بندی" Click="BtnFactorSplit">
<MenuItem.Icon>
<Image Width="12" Height="12" Source="img/ab-report.png"/>
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="ویرایش" Click="BtnFactorEdit">
<MenuItem.Icon>
<Image Width="12" Height="12" Source="img/Edit.png"/>
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</DataGrid.ContextMenu>
</DataGrid>
和我的cs代码:
MySqlCommand cmd3 = new MySqlCommand("SELECT query ", conn);
MySqlDataAdapter adp2 = new MySqlDataAdapter(cmd3);
DataSet ds2 = new DataSet();
adp2.Fill(ds2, "LoadDataBinding");
FactorGrid.DataContext = ds2;
有什么办法可以做我想做的事吗? 对不起,我的英语不好。
查看 DataTriggers。 它们可以帮助你绑定一个值,并根据不同的值做不同的事情。 您通常会在 </DataGrid.Columns> 和 <DataGrid.ContextMenu> 之间添加它。 更改颜色 RGB 以适合。
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="Paid">
<Setter Property="Background" Value="#447cff8b"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="Unpaid">
<Setter Property="Background" Value="#444eafff"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
如果不满足其他条件,则在您对默认值的进一步问题(在评论中)之后,您只需要再添加一行:
<Setter Property="Background" Value="#4400ffff"></Setter>
这超出了这样的样式触发器(第 3 行):
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Setter Property="Background" Value="#4400ffff"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding Status}" Value="Paid">
<Setter Property="Background" Value="#447cff8b"></Setter>
</DataTrigger>
<DataTrigger Binding="{Binding Status}" Value="Unpaid">
<Setter Property="Background" Value="#444eafff"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
这样,如果其中一个触发器被击中,它将从触发器中获取颜色,否则将使用默认值(上面的第 3 行)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.