突出显示单元格(如果找到)

RSM

我有一个数据网格,绑定到数据表后输出90行。行值是1-90升序。

我要实现的目标:

如果在数组/范围/数字列表中找到该数字,则将其突出显示为绿色。

我设法使其突出显示基于1值的单元格,但是如果要在范围内找到它们,我想突出显示几个单元格。

<DataGrid Name="grid" ItemsSource="{Binding}" Height="300" Width="900"
          AutoGenerateColumns="False"
          VerticalScrollBarVisibility="Disabled" HorizontalAlignment="Center" VerticalAlignment="Top" RowHeight="40">
            <DataGrid.Resources>
                <Style x:Key="BackgroundColourStyle" TargetType="{x:Type TextBlock}">
                    <Style.Triggers>
                        <Trigger Property="Text" Value="1">
                            <Setter Property="Background" Value="LightGreen" />
                        </Trigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.Resources>
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding Path=Number}" 
            ElementStyle="{StaticResource BackgroundColourStyle}" MinWidth="40">
                </DataGridTextColumn>
            </DataGrid.Columns>

            <DataGrid.ItemsPanel>
                <ItemsPanelTemplate>                    
                    <WrapPanel Orientation="Vertical" />
                </ItemsPanelTemplate>
            </DataGrid.ItemsPanel>
        </DataGrid>

您会看到我的值为1的触发器属性。这很好用,但是如上所述,如果单元格在后端的c#中设置的范围内,则如何更改它,然后将其突出显示为绿色。

绑定到数据表:

calledGrid.DataContext = calledNumbers.DefaultView;

数据表的实际制作:

DataSet dataSet = new DataSet("myDS");
            this.bingoCalls(dataSet);
            DataTable numbersTable = new DataTable("Numbers");
            numbersTable.Columns.Add("Number", typeof(Int32));

            for (int i = 1; i < 91; i++)
            {
                numbersTable.Rows.Add(i);
            }
            dataSet.Tables.Add(numbersTable);

感谢您的帮助。如果您需要更多信息,或者我一直不清楚或不清楚任何内容,请询问,我将尽力尽快答复。也请原谅我可能有的无知,我对wpf还是很陌生。我会尽力的

罗希特·瓦茨

您可以实现使用IMultiValueConverter,如果Text处于范围内,则返回true,否则返回false。Based on the value returned by converter, change background color

将三个参数传递给转换器:

  1. 实际文本值。
  2. 最小值。
  3. 最大值。

转换器

public class ItemExistInRangeConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType,
                          object parameter, CultureInfo culture)
    {
        bool itemsExistInRange = false;
        if (values.Length == 3)
        {
            int outputValue = int.MinValue;
            if (Int32.TryParse(values[0].ToString(), out outputValue))
            {
                int minValue = (int)values[1];
                int maxValue = (int)values[2];
                itemsExistInRange = minValue <= outputValue
                                     && outputValue <= maxValue;
            }
        }
        return itemsExistInRange;
    }

    public object[] ConvertBack(object value, Type[] targetTypes,
                                object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

XAML

<DataGrid.Resources>
    <local:ItemExistInRangeConverter x:Key="ItemExistInRangeConverter"/>
    <sys:Int32 x:Key="MinimumValue">1</sys:Int32>
    <sys:Int32 x:Key="MaximumValue">50</sys:Int32>
    <Style x:Key="BackgroundColourStyle" TargetType="{x:Type TextBlock}">
       <Style.Triggers>
          <DataTrigger Value="True">
             <DataTrigger.Binding>
                 <MultiBinding Converter="{StaticResource ItemExistInRangeConverter}">
                     <Binding Path="Text" RelativeSource="{RelativeSource Self}"/>
                     <Binding Source="{StaticResource MinimumValue}"/>
                     <Binding Source="{StaticResource MaximumValue}"/>
                 </MultiBinding>
             </DataTrigger.Binding>
             <Setter Property="Background" Value="LightGreen" />
          </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>

确保在根级别添加相应的名称空间:

xmlns:local="clr-namespace:NamespaceOfConverter"
// Replace NamespaceOfConverter with namespace where converter resides.
xmlns:sys="clr-namespace:System;assembly=mscorlib"

更新(如果要在数字数组中查找项目)

假设您的数字数组属性存在于代码后面或视图模型类中。

首先,您需要set ItemsSource of DataGrid to DataTable代替DataContext。

第二,set DataContext of DataGrid to this from code behind or an instance of viewModel class

另外,要刷新GUI,您的类应实现INotifyPropertyChanged接口。

现在,假设您有一个属性说:

public int[] RangeNumbers { get; set; }

默认情况下,它将包含您要突出显示的数字列表。

XAML将如下所示:

<DataGrid.Resources>
    <local:ItemExistInRangeConverter x:Key="ItemExistInRangeConverter"/>
       <Style x:Key="BackgroundColourStyle" TargetType="{x:Type TextBlock}">
           <Style.Triggers>
              <DataTrigger Value="True">
                 <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource ItemExistInRangeConverter}">
                       <Binding Path="Text" RelativeSource="{RelativeSource Self}"/>
                       <Binding Path="DataContext.RangeNumbers" 
                                RelativeSource="{RelativeSource FindAncestor,
                                                  AncestorType=DataGrid}"/>
                    </MultiBinding>
                 </DataTrigger.Binding>
               <Setter Property="Background" Value="LightGreen" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</DataGrid.Resources>

转换器代码:

public class ItemExistInRangeConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType,
                          object parameter, CultureInfo culture)
    {
        bool itemsExistInRange = false;
        if (values.Length == 2)
        {
            int outputValue = int.MinValue;
            int[] rangeNumbers = (int[])values[1];
            if (rangeNumbers != null && 
                Int32.TryParse(values[0].ToString(), out outputValue))
            {
                itemsExistInRange = rangeNumbers.Contains(outputValue);
            }
        }
        return itemsExistInRange;
     }

     public object[] ConvertBack(object value, Type[] targetTypes,
                                 object parameter, CultureInfo culture)
     {
         throw new NotImplementedException();
     }
}

现在,将根据中的初始数字突出显示项目RangeNumbers但是,假设您事后更新数组,则需要引发属性更改事件,以使GUI刷新如下:

RangeNumbers = new int[] { 23, 45, 47, 69 };
OnPropertyChanged("RangeNumbers");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何找到突出显示的单元格之和?

来自分类Dev

循环遍历每个 COLUMN 并找到突出显示的单元格

来自分类Dev

如果单元格未突出显示,请删除整行

来自分类Dev

如果差异为 ±2,则突出显示单元格

来自分类Dev

如果引用的单元格是今天的月/日(不是年),则突出显示该单元格

来自分类Dev

.closest()不突出显示单元格

来自分类Dev

突出显示CollectionView中的单元格

来自分类Dev

突出显示jtable中的单元格

来自分类Dev

突出显示整行而不是单元格

来自分类Dev

使用Openpyxl突出显示单元格

来自分类Dev

突出显示jtable中的单元格

来自分类Dev

根据价值突出显示单元格

来自分类Dev

选择行时突出显示单元格

来自分类Dev

使用if条件突出显示单元格

来自分类Dev

根据文本突出显示单元格

来自分类Dev

根据条件突出显示单元格

来自分类Dev

如果另一列的任何单元格中都存在值,则突出显示该单元格

来自分类Dev

如果特定单元格小于其上方的单元格,如何突出显示一行信息?

来自分类Dev

如果该值大于上一列中单元格的值,则突出显示该单元格

来自分类Dev

熊猫HTML输出条件格式-如果值在范围内,则突出显示单元格

来自分类Dev

如果我的公式为假,则尝试在Excel中使用条件格式突出显示单元格

来自分类Dev

如果*多个*列完全匹配,有没有办法突出显示单元格?

来自分类Dev

Google电子表格条件格式-如果值大于则突出显示单元格

来自分类Dev

如果与Excel中的公式匹配,则突出显示特定的单元格

来自分类Dev

如果单元格留空,则条件格式将突出显示整行

来自分类Dev

Excel如果在VLOOKUP上突出显示单元格

来自分类Dev

熊猫HTML输出条件格式-如果值在范围内,则突出显示单元格

来自分类Dev

Excel条件格式:突出显示单元格(如果不相等)

来自分类Dev

如果 F 列中的单元格包含文本“待定”,如何突出显示从 A 到 F 的整行

Related 相关文章

  1. 1

    如何找到突出显示的单元格之和?

  2. 2

    循环遍历每个 COLUMN 并找到突出显示的单元格

  3. 3

    如果单元格未突出显示,请删除整行

  4. 4

    如果差异为 ±2,则突出显示单元格

  5. 5

    如果引用的单元格是今天的月/日(不是年),则突出显示该单元格

  6. 6

    .closest()不突出显示单元格

  7. 7

    突出显示CollectionView中的单元格

  8. 8

    突出显示jtable中的单元格

  9. 9

    突出显示整行而不是单元格

  10. 10

    使用Openpyxl突出显示单元格

  11. 11

    突出显示jtable中的单元格

  12. 12

    根据价值突出显示单元格

  13. 13

    选择行时突出显示单元格

  14. 14

    使用if条件突出显示单元格

  15. 15

    根据文本突出显示单元格

  16. 16

    根据条件突出显示单元格

  17. 17

    如果另一列的任何单元格中都存在值,则突出显示该单元格

  18. 18

    如果特定单元格小于其上方的单元格,如何突出显示一行信息?

  19. 19

    如果该值大于上一列中单元格的值,则突出显示该单元格

  20. 20

    熊猫HTML输出条件格式-如果值在范围内,则突出显示单元格

  21. 21

    如果我的公式为假,则尝试在Excel中使用条件格式突出显示单元格

  22. 22

    如果*多个*列完全匹配,有没有办法突出显示单元格?

  23. 23

    Google电子表格条件格式-如果值大于则突出显示单元格

  24. 24

    如果与Excel中的公式匹配,则突出显示特定的单元格

  25. 25

    如果单元格留空,则条件格式将突出显示整行

  26. 26

    Excel如果在VLOOKUP上突出显示单元格

  27. 27

    熊猫HTML输出条件格式-如果值在范围内,则突出显示单元格

  28. 28

    Excel条件格式:突出显示单元格(如果不相等)

  29. 29

    如果 F 列中的单元格包含文本“待定”,如何突出显示从 A 到 F 的整行

热门标签

归档