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] < '0'" FieldName="Age" PredefinedFormatName="LightRedFillWithDarkRedText"/>
</dxg:TableView.FormatConditions>
<dxg:TableView.FormatConditions>
<dxg:FormatCondition ApplyToRow="True" Expression="[Income] < '0'" FieldName="Income" PredefinedFormatName="LightRedFillWithDarkRedText"/>
</dxg:TableView.FormatConditions>
<dxg:FormatCondition ApplyToRow="True" Expression="[Dept] < '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" }
);
#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] < '0'" FieldName="Age" PredefinedFormatName="LightRedFillWithDarkRedText"/>
</dxg:TableView.FormatConditions>
<dxg:TableView.FormatConditions>
<dxg:FormatCondition ApplyToRow="True" Expression="[Income] < '0'" FieldName="Income" PredefinedFormatName="LightRedFillWithDarkRedText"/>
</dxg:TableView.FormatConditions>
<dxg:FormatCondition ApplyToRow="True" Expression="[Dept] < '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" }
);