找回密码
 立即注册

QQ登录

只需一步,快速开始

q406157290

高级会员

124

主题

531

帖子

1359

积分

高级会员

积分
1359

活字格认证

q406157290
高级会员   /  发表于:2015-3-21 09:34  /   查看:7949  /  回复:9
C1DataGrid 根据Button可用不可用设置一行的背景色 如何实现?

如图图示例代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

9 个回复

倒序浏览
Alice
社区贡献组   /  发表于:2015-3-23 10:43:00
沙发
回复 1楼q406157290的帖子

根据条件来设置背景色,其中有一种方式是使用LoadedCellPresenter/UnloadedCellPresenter事件来实现。在事件中设置你所需要的values/styles。

在该事件中获取到Enable状态,然后给一行的单元格设置背景色。具体的你需要根据自己的需求判断获取到button的Enable状态,然后通过e.Cell.Row.Presenter.Background给当前行设置背景色。

该事件的使用方法可以参考随机安装实例:
\Documents\ComponentOne Samples\Studio for WPF\C1.WPF.DataGrid\CS\DataGridSamples\Advanced\ConditionalFormat
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-3-23 16:41:00
板凳
整行变色如何实现呢? 例子是单个单元格变色
  而且 LoadedCellPresenter 这个方法是 滚动条拖到变色的列才显示变色  画面初始化时 颜色并不改变。
  我要的是Grid里满足条件的行就变色  不跟拖滚动条啥的有限制。
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-3-23 16:42:00
地板
希望能对我给的Demo做修改
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-3-23 18:24:00
5#
回复 3楼q406157290的帖子

2楼所提供的示例中的e.Cell该成e.Cell.Row即可对行背景色进行设置。
这个事件在是在单元格的可视元素添加到visual tree的时候触发,在初始化的时候可以被触发。

我看你在论坛这么长时间,已经对我们产品越来越熟悉,技术也越来越纯熟。如果LoadedCellPresenter/UnloadedCellPresenter可以满足你的需求,你可以按照这个思路完成Demo。如果有具体的问题,可以提出来,我帮助你解决。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-3-31 19:25:00
6#
我这么设置可以设置上 但是滚动滚动条时 背景色会到处乱窜
但是sample没有这个现象
能不能换种方法设置行的背景色啊
  要求根据combobox的内容 设置这一行的背景色  我想在前台通过样式控制  你看可行不 但是不太会写  能帮我昨个demo吗  谢谢!~
回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-4-1 12:32:00
7#
回复 6楼q406157290的帖子

除了LoadedCellPresenter这种方式,还有一种Converter的方法。
对Row.Backgroud,自己通过Conveter来设置背景色,在Converter里根据需求条件更改颜色。
我不清楚你的业务逻辑,无法按照你的业务做示例。但我可以提供Converter的基本思路。如果符合你的业务需求,你可以按照这个思路去实现。

基本步骤:
1.C1DataGrid设置RowStyle:
  1. <c1:C1DataGrid   x:Name="grid"   RowStyle="{StaticResource rowstyle}"/>
复制代码


2.继承IValueConverter接口,在Convert方法里判断某种条件下设置背景色。
比如:
  1. public class MyConverter : IValueConverter

  2.     {

  3.         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

  4.         {

  5.             var p = value as Product;  // typecast the data item here

  6.            if (p != null)

  7.            {

  8.                if (p.Available == true)

  9.                {

  10.                    return new SolidColorBrush(Colors.Yellow);

  11.                }

  12.                else return new SolidColorBrush(Colors.White);

  13.            }

  14.            return new SolidColorBrush(Colors.White);

  15.         }



  16.         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)

  17.         {

  18.             return null;

  19.         }

  20.     }

复制代码


3.在XAML里,重写Style,类型为DataGridRowPresenter。
  1. <local:MyConverter x:Key="converter"/>
  2.        <Style x:Key="rowstyle" TargetType="c1:DataGridRowPresenter">
  3.            <Setter Property="BorderThickness" Value="0"/>
  4.            <Setter Property="Template">
  5.                <Setter.Value>
  6.                    <ControlTemplate TargetType="c1:DataGridRowPresenter" >
  7. //在这里重写Template,下面这句代码是参考的。
  8. <Border x:Name="BackgroundElement" Background="{Binding Path=Row.DataItem,RelativeSource={RelativeSource TemplatedParent}, Converter={StaticResource converter}}" />
  9.                                             </ControlTemplate>
  10.                </Setter.Value>
  11.            </Setter>
  12.        </Style>
复制代码
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-4-2 20:43:00
8#
你那种 继承 IValueConverter  重新Convert的方法可以实现 但是我们已经用到了这个方法 返回值是true 和 false  不知道怎么返回多个参数  实现起来比较麻烦

下面这种方法可以实现  根据combobox的值 变化这一行的背景色
  1. <c1:C1DataGrid.CellStyle>
  2.                 <Style TargetType="{x:Type c1:DataGridCellPresenter}">
  3.                     <Style.Triggers>
  4.                         <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=c1:DataGridRowPresenter}, Path=Row.DataItem.ID}" Value="10010">
  5.                             <Setter Property="Background" Value="Gray"/>
  6.                         </DataTrigger>
  7.                     </Style.Triggers>
  8.                 </Style>
  9.             </c1:C1DataGrid.CellStyle>
复制代码


Row.DataItem.ID  是绑定数据源列的属性
10010                  是绑定的值
回复 使用道具 举报
q406157290
高级会员   /  发表于:2015-4-2 20:54:00
9#
Demo 完善

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

评分

参与人数 1金币 +100 收起 理由
Alice + 100 奖励金币

查看全部评分

回复 使用道具 举报
Alice
社区贡献组   /  发表于:2015-4-3 10:16:00
10#
回复 9楼q406157290的帖子

谢谢对该问题的反馈。
请点击评分,对我的服务做出评价!  5分为非常满意!

葡萄城控件服务团队

官方网站: http://www.gcpowertools.com.cn
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部