如何对DevExpress WPF网格控制行进行着色?

时间:2021-03-27 00:05:48

i have a GridControl :

我有一个GridControl:


 <dxg:GridControl Name="grd"  Height="270">
            <dxg:GridControl.Columns>
                <dxg:GridColumn Header="Id" FieldName="Id" AllowEditing="True" Width="30"/>
                <dxg:GridColumn Header="Name" FieldName="Name" AllowEditing="False" />
                <dxg:GridColumn Header="SurName" FieldName="SurName" AllowEditing="False" />
                <dxg:GridColumn Header="Age" FieldName="Age" CellStyle="{StaticResource customCellStyle}"  AllowEditing="False" />
                <dxg:GridColumn Header="Income" FieldName="Income" AllowEditing="False" />
                <dxg:GridColumn Header="Dept" FieldName="Dept" AllowEditing="False" />
            </dxg:GridControl.Columns>

        </dxg:GridControl>

i have been binding itemsource=List. BUT i want to colorize if
Age<=0 or Income<0 or Dept<=0 (Row colorize red after binding data)

我一直在绑定itemsource=List。但是我想在年龄<=0或收入<0或Dept<=0时着色(绑定数据后行着色为红色)

how can i do that?

我该怎么做呢?

5 个解决方案

#1


5  

You can use this for the entire row style:

您可以将此用于整个行样式:

<dxg:TableView.RowStyle>
    <Style  BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="{x:Type dxg:GridRowContent}">
        <Setter Property="Background" Value="{Binding Path=DataContext.Colour}" />
    </Style>
</dxg:TableView.RowStyle>

and for the cell style:

对于单元格样式:

<dxg:GridColumn.CellStyle>
    <Style TargetType="{x:Type dxg:CellContentPresenter}">
        <Setter Property="TextBlock.Foreground" Value="Black" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Data.SomeBooleanValue}" Value="True">
                <Setter Property="Background" Value="Lime" />
                <Setter Property="TextBlock.Foreground" Value="Black" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</dxg:GridColumn.CellStyle>

#2


1  

Add the following lines in resources section :

在参考资料部分增加以下几行:

<Style x:Key="ConditionalRowStyle"  BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="{x:Type dxg:GridRowContent}">
        <Setter Property="Background" Value="{Binding Path=DataContext.Age, Converter={local:ColorValueConverter}}"/>
</Style>

Then create a class that implements the IValueConverter ColorValueConverter

然后创建一个实现IValueConverter ColorValueConverter的类

 public class ColorValueConverter : MarkupExtension, IValueConverter
    {


        #region IValueConverter Members
        public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
        {
      /* your conditions here i.e Age<=0 */     
       if ((Int64)value <= 0)
         /*Return red color*/
                return Brushes.Red;
            else
        /*Return the default color*/                  
                return Brushes.White;
        }

        public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
        {
            return null;
        }
        #endregion

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }

set xmlns:local as the namespace of the ColorValueConverter class

设置xmlns:local作为ColorValueConverter类的命名空间

At last set the Row style bindings in the table view :

最后在表视图中设置行样式绑定:

 <dxg:TableView Name="tableView1" RowStyle="{StaticResource ConditionalRowStyle}">

Repeat the same for the other columns as well

对其他列重复相同的操作。

#3


1  

You need to edit TableView

您需要编辑TableView。

<dxg:GridControl.View>
<dxg:TableView x:Name="tv_grd" ShowGroupPanel="False" AutoWidth="True"                  
    IsTotalSummaryMenuEnabled="False" RowUpdated="tv_grd_RowUpdated" >
    <dxg:TableView.FormatConditions>                        
        <dxg:FormatCondition ApplyToRow="True" Expression="[Age] &lt; '0'" FieldName="Age" PredefinedFormatName="LightRedFillWithDarkRedText"/>
    </dxg:TableView.FormatConditions>
    <dxg:TableView.FormatConditions>                        
        <dxg:FormatCondition ApplyToRow="True" Expression="[Income] &lt; '0'" FieldName="Income" PredefinedFormatName="LightRedFillWithDarkRedText"/>
    </dxg:TableView.FormatConditions>
        <dxg:FormatCondition ApplyToRow="True" Expression="[Dept] &lt; '0'" FieldName="Dept" PredefinedFormatName="LightRedFillWithDarkRedText"/>
    </dxg:TableView.FormatConditions>
</dxg:TableView>

#4


1  

You can set format to row programmatically. It also work to gridView.

可以通过编程方式将格式设置为行。它也适用于gridView。

SolidColorBrush scb = new BrushConverter().ConvertFromString("#FFFF0000") as SolidColorBrush;//Red
        DevExpress.Xpf.Core.ConditionalFormatting.Format frm = new DevExpress.Xpf.Core.ConditionalFormatting.Format { Background = scb };
        TreeListView.FormatConditions.Add
            (
                new FormatCondition { FieldName = "Name", ApplyToRow = true, Format = frm , Expression = "[ZoneId] = 1" }
            );

#5


0  

You can start from here : How to Conditionally Apply Styles

您可以从这里开始:如何有条件地应用样式

#1


5  

You can use this for the entire row style:

您可以将此用于整个行样式:

<dxg:TableView.RowStyle>
    <Style  BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="{x:Type dxg:GridRowContent}">
        <Setter Property="Background" Value="{Binding Path=DataContext.Colour}" />
    </Style>
</dxg:TableView.RowStyle>

and for the cell style:

对于单元格样式:

<dxg:GridColumn.CellStyle>
    <Style TargetType="{x:Type dxg:CellContentPresenter}">
        <Setter Property="TextBlock.Foreground" Value="Black" />
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=Data.SomeBooleanValue}" Value="True">
                <Setter Property="Background" Value="Lime" />
                <Setter Property="TextBlock.Foreground" Value="Black" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</dxg:GridColumn.CellStyle>

#2


1  

Add the following lines in resources section :

在参考资料部分增加以下几行:

<Style x:Key="ConditionalRowStyle"  BasedOn="{StaticResource {dxgt:GridRowThemeKey ResourceKey=RowStyle}}" TargetType="{x:Type dxg:GridRowContent}">
        <Setter Property="Background" Value="{Binding Path=DataContext.Age, Converter={local:ColorValueConverter}}"/>
</Style>

Then create a class that implements the IValueConverter ColorValueConverter

然后创建一个实现IValueConverter ColorValueConverter的类

 public class ColorValueConverter : MarkupExtension, IValueConverter
    {


        #region IValueConverter Members
        public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
        {
      /* your conditions here i.e Age<=0 */     
       if ((Int64)value <= 0)
         /*Return red color*/
                return Brushes.Red;
            else
        /*Return the default color*/                  
                return Brushes.White;
        }

        public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
        {
            return null;
        }
        #endregion

        public override object ProvideValue(IServiceProvider serviceProvider)
        {
            return this;
        }
    }

set xmlns:local as the namespace of the ColorValueConverter class

设置xmlns:local作为ColorValueConverter类的命名空间

At last set the Row style bindings in the table view :

最后在表视图中设置行样式绑定:

 <dxg:TableView Name="tableView1" RowStyle="{StaticResource ConditionalRowStyle}">

Repeat the same for the other columns as well

对其他列重复相同的操作。

#3


1  

You need to edit TableView

您需要编辑TableView。

<dxg:GridControl.View>
<dxg:TableView x:Name="tv_grd" ShowGroupPanel="False" AutoWidth="True"                  
    IsTotalSummaryMenuEnabled="False" RowUpdated="tv_grd_RowUpdated" >
    <dxg:TableView.FormatConditions>                        
        <dxg:FormatCondition ApplyToRow="True" Expression="[Age] &lt; '0'" FieldName="Age" PredefinedFormatName="LightRedFillWithDarkRedText"/>
    </dxg:TableView.FormatConditions>
    <dxg:TableView.FormatConditions>                        
        <dxg:FormatCondition ApplyToRow="True" Expression="[Income] &lt; '0'" FieldName="Income" PredefinedFormatName="LightRedFillWithDarkRedText"/>
    </dxg:TableView.FormatConditions>
        <dxg:FormatCondition ApplyToRow="True" Expression="[Dept] &lt; '0'" FieldName="Dept" PredefinedFormatName="LightRedFillWithDarkRedText"/>
    </dxg:TableView.FormatConditions>
</dxg:TableView>

#4


1  

You can set format to row programmatically. It also work to gridView.

可以通过编程方式将格式设置为行。它也适用于gridView。

SolidColorBrush scb = new BrushConverter().ConvertFromString("#FFFF0000") as SolidColorBrush;//Red
        DevExpress.Xpf.Core.ConditionalFormatting.Format frm = new DevExpress.Xpf.Core.ConditionalFormatting.Format { Background = scb };
        TreeListView.FormatConditions.Add
            (
                new FormatCondition { FieldName = "Name", ApplyToRow = true, Format = frm , Expression = "[ZoneId] = 1" }
            );

#5


0  

You can start from here : How to Conditionally Apply Styles

您可以从这里开始:如何有条件地应用样式