c# - 基于单元格值的DataGrid行背景

标签 c# wpf xaml wpfdatagrid

我目前正在研究 C# WPF 数据网格。我有一个 DataGrid,它具有自动生成的列,代码连接到 SQLite 数据库并创建一个数据集,然后将该数据集设置为 DataGrid ItemsSource。

下面是DataGrid的XAML代码

<DataGrid AutoGenerateColumns="True"
          Margin="12,71,12,32"
          Name="tblLog"
          ColumnWidth="*"
          CanUserResizeRows="False"
          AreRowDetailsFrozen="False"
          CanUserAddRows="True"
          CanUserDeleteRows="True"
          IsReadOnly="True"
          MouseDoubleClick="tblLog_MouseDoubleClick">                
</DataGrid>

下面是为 DataGrid 设置 ItemsSource 的代码

try
{
    DataSet ds = new DataSet();
    SQLiteDataAdapter da = new SQLiteDataAdapter(query, db.conn);
    da.Fill(ds);

    //tblGrid.AutoGenerateColumns = true;
    tblGrid.ItemsSource = ds.Tables[0].DefaultView;                    
}
catch (SQLiteException ex)
{
    MessageBox.Show("Unable to retrieve logins from database.\n\n" + ex.Message + "\n\nError Code: " + ex.ErrorCode);
}

数据库中显示的列(自动生成)是 ID、日期、时间、状态。 我需要做的是,如果状态列一行中的值等于错误,则更改该行的背景颜色。

我假设我需要在 DataGrid 标签中添加某种样式标签和 DataTriggers,但不确定我需要什么。我对设置 ItemsSource 的代码所做的任何尝试都会显示错误,指出在添加 ItemsSource 之前源需要为空。

感谢您提供的任何帮助。

最佳答案

您可以使用 DataTrigger 来执行此操作。

这是一个快速示例。我创建了一个名为 Person 的类,它具有 Name、Age 和 Active 属性。

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public bool Active { get; set; }
}

在主窗口的构造函数中,我将 3 个 Person 对象添加到一个列表,然后将该列表绑定(bind)到 DataGrid

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        List<Person> people = new List<Person>();
        people.Add(new Person() 
        { 
            Name = "John Doe",
            Age = 32,
            Active = true
        });
        people.Add(new Person()
        {
            Name = "Jane Doe",
            Age = 30,
            Active = true
        });
        people.Add(new Person()
        {
            Name = "John Adams",
            Age = 64,
            Active = false
        });
        tblLog.ItemsSource = people;
    }
}

然后在 MainWindow 的 XAML 中,我创建了一个 DataTrigger 样式作为资源。

<Window.Resources>
    <Style TargetType="DataGridRow">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Active}" Value="False">
                <Setter Property="Background" Value="Red" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

此触发器的作用是从 DataGridRow 中的 Person 对象的 Active 字段中获取值,如果该值为 false,则它会转将行的背景色变为红色。

关于c# - 基于单元格值的DataGrid行背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7381726/

相关文章:

c# - 在 XAML 中设置命令目标

c# - uwp 中的 ListView 组

c# - Windows 10 UWP 上的应用内购买问题

c# - 关于方法参数类型的多态性

wpf - 如何清除(WPF)DataGrid 中的单元格(使其获得 NULL 值)?

c# - 在 Viewmodel 中保存 View 的更改吗?

c# - 在没有 XNA 的 Windows Phone 中点击并拖动手势

c# - Bouncy CaSTLe ECDH 和 .net4 原生 ECDiffieHellmanCNG 之间的区别

c# - 将字节数组转换为带分隔符的字符串

c# - WPF Key 是数字或数字