基于单元格值的数据网格行背景
本文关键字:数据网 网格 背景 数据 单元格 | 更新日期: 2023-09-27 18:08:11
我目前正在开发一个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之前,Source需要为空。
谢谢你能提供的任何帮助。
您可以使用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
对象添加到一个列表中,然后将该列表绑定到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;
}
}
然后在主窗口的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
字段中获取值,如果该值为假,则将行的背景色变为红色。