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

如何根据DataTable错误设置WPF DataGrid单元格背景与提示

实现DataGrid单元格错误提示与背景色变化

步骤1:创建列错误转换器

首先编写一个转换器类,用于判断指定DataRowView的目标列是否存在错误,同时返回错误信息或布尔判断结果:

Imports System.Windows.Data

Public Class DataColumnErrorConverter
    Implements IMultiValueConverter

    Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IMultiValueConverter.Convert
        Dim rowView As DataRowView = TryCast(values(0), DataRowView)
        Dim columnName As String = TryCast(values(1), String)

        If rowView IsNot Nothing AndAlso Not String.IsNullOrEmpty(columnName) Then
            Dim errorMsg As String = rowView.Row.GetColumnError(columnName)
            ' 根据目标类型返回对应结果:布尔值用于判断是否有错误,字符串用于ToolTip显示
            Return If(targetType = GetType(Boolean), Not String.IsNullOrEmpty(errorMsg), errorMsg)
        End If

        Return If(targetType = GetType(Boolean), False, Nothing)
    End Function

    Public Function ConvertBack(value As Object, targetTypes() As Type, parameter As Object, culture As Globalization.CultureInfo) As Object() Implements IMultiValueConverter.ConvertBack
        Throw New NotImplementedException()
    End Function
End Class

步骤2:在XAML中配置单元格样式

在窗口或用户控件的资源区声明转换器,并定义DataGrid单元格的样式,实现背景色切换和ToolTip绑定逻辑:

<Window.Resources>
    <!-- 注册转换器 -->
    <local:DataColumnErrorConverter x:Key="ColumnErrorConverter"/>
    
    <!-- 定义带错误提示的单元格样式 -->
    <Style x:Key="ErrorCellStyle" TargetType="DataGridCell">
        <!-- 默认背景色为白色 -->
        <Setter Property="Background" Value="White"/>
        
        <!-- 绑定ToolTip到当前单元格的列错误信息 -->
        <Setter Property="ToolTip">
            <Setter.Value>
                <MultiBinding Converter="{StaticResource ColumnErrorConverter}">
                    <!-- 绑定当前行的DataRowView对象 -->
                    <Binding/>
                    <!-- 绑定当前单元格所属列的Header(需与DataTable列名一致) -->
                    <Binding RelativeSource="{RelativeSource Self}" Path="Column.Header"/>
                </MultiBinding>
            </Setter.Value>
        </Setter>
        
        <!-- 触发规则:存在列错误时切换背景为红色 -->
        <Style.Triggers>
            <MultiDataTrigger>
                <MultiDataTrigger.Conditions>
                    <Condition>
                        <Condition.Binding>
                            <MultiBinding Converter="{StaticResource ColumnErrorConverter}">
                                <Binding/>
                                <Binding RelativeSource="{RelativeSource Self}" Path="Column.Header"/>
                            </MultiBinding>
                        </Condition.Binding>
                        <Condition.Value>True</Condition.Value>
                    </Condition>
                </MultiDataTrigger.Conditions>
                <Setter Property="Background" Value="Red"/>
            </MultiDataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

步骤3:为DataGrid应用单元格样式

修改你的DataGrid XAML代码,添加CellStyle属性引用上述定义的样式:

<DataGrid x:Name="myDataGrid" HorizontalAlignment="Left" Height="304"
          Margin="0,122,0,0" VerticalAlignment="Top" Width="790"
          HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
          SelectionUnit="CellOrRowHeader" Style="{DynamicResource DataGridStyle1}"
          CanUserSortColumns="False"
          CellStyle="{StaticResource ErrorCellStyle}">
</DataGrid>

注意事项

  • 确保DataGrid列的Header值与DataTable的列名完全匹配,否则转换器无法正确定位列错误信息。如果列Header与列名不同,可将绑定路径改为Column.SortMemberPath或Column.DisplayBinding.Path.Path,以获取正确的DataTable列名。
  • 调用SetColumnError方法设置错误信息后,DataRowView会自动触发属性变更通知,UI会实时更新单元格的背景色和ToolTip,无需手动刷新DataGrid。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:07:37