You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF DataGrid如何根据SQL查询结果设置对应行颜色?

实现WPF DataGrid中cancled列值为1时行变色的解决方案

一、修正数据模型与数据加载逻辑

你的现有C#代码仅读取了数据但未将cancled值绑定到DataGrid的数据源对象中,需先确保每个数据项包含对应属性:

  1. 创建数据实体类(示例):
public class JobItem
{
    public int Id { get; set; }
    public int Cancled { get; set; } // 对应数据库cancled列,值为1或0
    // 根据表结构添加其他属性
}
  1. 修改数据加载代码,将查询结果填充到实体集合并绑定到DataGrid:
List<JobItem> jobList = new List<JobItem>();
// 注意:字符串拼接SQL存在注入风险,建议改用参数化查询或ORM框架
string lbcompjob = $"SELECT * FROM {Table} WHERE [cancled] = 1";

using (SqlCommand cmd = new SqlCommand(lbcompjob, conn))
{
    try
    {
        conn.Open();
        using (SqlDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                JobItem item = new JobItem();
                item.Id = Convert.ToInt32(dr["Id"]);
                item.Cancled = Convert.ToInt32(dr["cancled"]);
                // 读取并赋值其他属性
                jobList.Add(item);
            }
        }
        // 将集合绑定到DataGrid
        yourDataGridName.ItemsSource = jobList;
    }
    catch (Exception ex)
    {
        // 添加实际异常处理,如日志记录或用户提示
        Console.WriteLine(ex.Message);
    }
    finally
    {
        if (conn.State == ConnectionState.Open)
            conn.Close();
    }
}

二、修改XAML的DataGrid行样式

在现有RowStyle中添加针对Cancled属性的DataTrigger,触发行颜色变更:

<DataGrid x:Name="yourDataGridName">
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Setter Property="IsHitTestVisible" Value="False"></Setter>
            <Style.Triggers>
                <!-- 保留原有Suspended触发器(若需) -->
                <DataTrigger Binding="{Binding Suspended}" Value="Running">
                    <Setter Property="Background" Value="#FFEA2B0D"/>
                </DataTrigger>
                <!-- 新增cancled值为1的行样式触发器 -->
                <DataTrigger Binding="{Binding Cancled}" Value="1">
                    <Setter Property="Background" Value="#FFE57373"/> <!-- 自定义背景色 -->
                    <Setter Property="Foreground" Value="White"/> <!-- 可选:修改文字颜色 -->
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Id}" Width="40" Header=" Job ID " Foreground="Black" IsReadOnly="True">
            <DataGridTextColumn.HeaderStyle>
                <Style TargetType="{x:Type DataGridColumnHeader}">
                    <Setter Property="Background" Value="#FF8A8A8A"/>
                </Style>
            </DataGridTextColumn.HeaderStyle>
        </DataGridTextColumn>
        <!-- 可选:显示cancled列 -->
        <DataGridTextColumn Binding="{Binding Cancled}" Header="Canceled" IsReadOnly="True"/>
    </DataGrid.Columns>
</DataGrid>

三、额外说明

  • 若数据库中cancled是bit类型(值为1对应bool类型的True),需将DataTrigger的Value改为True,同时实体类中Cancled属性改为bool类型。
  • 若需要动态更新行样式,建议实体类实现INotifyPropertyChanged接口,确保属性变化时UI自动刷新。

内容的提问来源于stack exchange,提问作者Vegas Johnson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 23:00:17