繁体   English   中英

C# WPF 根据数据更改 DataGrid 行(背景)颜色

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM