DEV GridControl TableView隔行换色/奇偶行换色
GridControl中的TableView“奇偶行换色”这件事情纠结了我好几天,虽然已经是上个月的事情,好歹记录一下吧,万一有谁要用到呢。
GridControl是长这个样子的,
<dxg:GridControl AutoPopulateColumns="True" >
<dxg:GridControl.View>
<dxg:TableView AllowPerPixelScrolling="True" ShowTotalSummary="False" ShowGroupPanel="False">
</dxg:TableView>
</dxg:GridControl.View>
<dxg:GridControl.Columns>
<dxg:GridColumn Header="COL1"/>
<dxg:GridColumn Header="COL2"/>
<dxg:GridColumn Header="COL3"/>
</dxg:GridControl.Columns>
</dxg:GridControl>
当时这个DEV的版本是V11.2的,原本准备升级到V15.0的,但最终还是未升级。
然后问题来了……
我们知道,更改奇偶行,其实是需要正对TableView的属性来做点什么的。如果是V15.0的版本,那就很easy了,直接写一个属性AlternateRowBackground="颜色"就搞定了,但是,此时需要修改的是v11.2,呵呵哒~~说实话,我之前对这个什么鬼真的不熟悉啊,然后疯狂的就是找资料,希望有人跟我会有相同的问题……
皇天不负有心人啊,终于有那么一丝丝的头绪……有2篇文章(也许不能称之为文章)对我很有帮助:
1、将转换器与TableView的RowStyle进行绑定: http://www.itnose.net/detail/6150073.html,
![]() |
左侧是链接中的内容。 它的传入条件是Row.ID,这个条件要求必须是GridColumn的FildName, 很明显他的这个Id是列中原来就存在的。 对于我这种奇偶行变色但列中并不存在行号的人来说,并不可行。 于是,必须获取行号……见2. |
2、由于1不能解决行号的问题,于是,http://www.fx114.net/qa-141-73449.aspx,其实这个内容与TableView并不一样,但是给了我一些启发。。。
然后就有了我自己的代码:
.cs
Style style = new Style(typeof(GridRowContent), tableView.RowStyle);
System.Windows.Data.Binding binding = new System.Windows.Data.Binding();
binding.Converter = new RowHandleToColorConverter();//不要条件,此时会将整个Row传过去
binding.ConverterParameter = alternateRowBackground;
style.Setters.Add(new Setter(GridRowContent.BackgroundProperty, binding));
tableView.RowStyle = style;
RowHandleToColorConverter.cs
public class RowHandleToColorConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
RowData r = value as RowData;
int index = r.RowHandle.Value + ;
Brush brush = Brushes.Transparent;
if ((int)index % == )//或 if(r.EvenRow)
brush = (Brush)parameter;
else
brush = Brushes.White;
return brush;
} public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
然后,嗯,很开心,终于写好了。。。but, 我后面发现当数据超过20条时,颜色就有些不太对了……
假设我原来希望绿白相间,现在可能会变成偶尔出现绿绿蓝白,或者白白绿的现象。

不懂啊……总不能这样子就上交任务啊。。。后面发现可能是GridControl的虚拟化造成的,本来就准备了20条数据的Row,当拖动滚动条时第21条数据可能占用了原来第1条数据的Row,想着把虚拟化关了吧,呵呵哒,没有效果……想着要不把它能显示的最大行数改一下,不好意思,没这个功能……
好吧,最后我只能弱弱的去改TableView的模板了、、、
因为我需要用到的GridControl很多,就写了一个通用的Style:
<Style x:Key="tableViewRowStyle" TargetType="{x:Type dxg:GridRowContent}">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding EvenRow}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="#FFFCFCFC"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding EvenRow}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="#FFF6F6F6"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
其中,x:Key="tableViewRowStyle"可以不写,这样所有的GridControl都会用这样的RowStyle,也不不要绑定啦,如果自己单独绑定的话只需要在TableView中写上:
<dxg:TableView RowStyle="{StaticResource tableViewRowStyle}" </dxg:TableView>
这样比写Converter简单方便快捷多啦。。。
后来想到,毕竟这些颜色是固定的不是么,如果现在给你一个listBox,你选中哪个颜色A就把背景色变成A/白相间,要怎么办呢?于是一个多值绑定+Converter的Demo就出炉了,思路其实还是基于以上2种,但是可以看看。
<local:RowHandleToColorMultiConverter x:Key="con"/> <dxg:GridControl.View>
<dxg:TableView AllowPerPixelScrolling="True" ShowTotalSummary="False" ShowGroupPanel="False">
<dxg:TableView.Style>
<Style TargetType="{x:Type dxg:GridRowContent}">
<Setter Property="Background">
<Setter.Value>
<MultiBinding Converter="{StaticResource con}">
<Binding Path="RowHandle.Value"/>
<Binding ElementName="listBox" Path="SelectedItem.Name"/>
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
</dxg:TableView.Style>
</dxg:TableView>
</dxg:GridControl.View>
其中:
1、SelectedItem.Name,是Item的名称,在listBox.ItemsSource赋值的时候,把Name的值设定为颜色码,不含"#",如item.Name="FFF0F0F0"酱样子的。。。
2、con这个转换器还是要引用的
3、下面的其中object[] values与xaml中Binding是对应的。。
public class RowHandleToColorMultiConverter : IValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (values == null) return null; int index = (int)values[];
string value = values[].ToString();
Brush brush = Brushes.Transparent;
if (value == "{DependencyProperty.UnsetValue}")
{
return brush;
} if ((int)index % == )
brush = (Brush)new BrushConverter().ConvertFromString("#" + value);
else
brush = Brushes.White;
return brush;
} public object ConvertBack(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return null;
}
}
上个效果图吧,
![]() |
![]() |
![]() |
| 初始时,没有颜色(代码中可以设置默认颜色) | 选择绿色,颜色比较淡,但是还是可以看到的 | 换一个颜色,颜色比较淡 |
弹出来选择颜色的框框是Listbox哦。。。因为Demo是在内网写的,外网又没有DEV,所以只能偷偷的用手机拍照啦。。。
DEV GridControl TableView隔行换色/奇偶行换色的更多相关文章
- 纯CSS3代码实现表格奇偶行异色,鼠标悬浮变色
1.首先会用到<tr></tr>元素两个伪类,nth-child()和hover. 然后需要注意的是伪类都是通过冒号引用的,不是点号,即tr:hover{} 其次,CSS代码中 ...
- devexpress表格控件gridcontrol设置隔行变色、焦点行颜色、设置(改变)显示值、固定列不移动(附源码)
介绍一些常用的gridcontrol设置. 1.设置隔行变色.首先设置显示隔行变色,步骤:OptionsView-->EnableAppearanceEvenRow-->true和Opti ...
- ExtJs4学习(十)Grid单元格换色和行换色的方法
Grid单元格换色 { text:'类别', dataIndex:'type', align:'center', renderer:function(value,metaData){ console. ...
- DEV GridControl.TableView FocusedRow选中行背景颜色
上次修改了TableView.RowStyle,导致了一个问题:覆盖了GridControl默认的选中行颜色. 于是需要重写选中行的颜色. 刚开始的想法是: <dxg:TableView> ...
- c#dev gridview 设置隔行换色等
1:禁止gridview编辑 2:隔行换色 介绍一些常用的gridcontrol设置. 1.设置隔行变色.首先设置显示隔行变色,步骤:OptionsView-->EnableAppearance ...
- 使用JS创建表格以及隔行换色(包括隔N行换色)
<html> <head> <title></title> <style> table{ width:800px; border-colla ...
- DEV GridControl小结
1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.Ad ...
- 转载--DEV GridControl 的一些基本操作
1. 如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 2. 如何新增一条记录 (1).gridView.Ad ...
- DEV GridControl小结。。
[转]DEV GridControl小结.. 来自:http://www.cnblogs.com/yuerdongni/archive/2012/09/08/2676753.html 1. 如何解 ...
随机推荐
- 让Placeholder在IE中燥起来
网上有好多关于这方面解决兼容性问题的文章,很多招式,学会这一招,让你轻松搞定Placeholder的兼容性,叫我好人,拿走,不谢.... placeholder属性是HTML5 中为input添加的. ...
- CsvHelper
写66666行两个数字 用CsvHelper里的ExcelSerializer 400ms SaveAs 200ms 共600ms 直接用StreamWriter 150ms 行数可以超过65536 ...
- hduoj 3459 Rubik 2×2×2
http://acm.hdu.edu.cn/showproblem.php?pid=3459 Rubik 2×2×2 Time Limit: 10000/5000 MS (Java/Others) ...
- 关于Web项目里的给表单验证控件添加结束时间不得小于开始时间的验证方法,日期转换和前台显示格式之间,还有JSON取日期数据格式转换成标准日期格式的问题
项目里有些不同页面间的日期显示格式是不同的, 第一个问题: 比如我用日期控件WdatePicker.js导包后只需在input标签里加上onClick="WdatePicker()" ...
- 修改 window.setTimeout,使之可以传递参数和对象参数
/* 功能:修改 window.setTimeout,使之可以传递参数和对象参数 使用方法: setTimeout(回调函数,时间,参数1,,参数n) */ var _setTimeout=setTi ...
- asp批量查询
在做asp查询时候 借鉴的一些代码 留个纪念....... <!-- #include file="conn.asp"--> <html> <head ...
- samba的rpm包,只有tar.gz文件安装
tar.gz包是源代码的包,不能直接运行,需要安装tar xvf samba-3.5.1.tar.gz cd samba-3.5.1 &&cd source3 &&./ ...
- ReactJs入门教程
现在最热门的前端框架有AngularJS.React.Bootstrap等.自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件化的开发深深的吸引了我,下面来跟我一起领 ...
- asp.net core 使用 StaticFiles 中间件 (不完整翻译)
原文地址:https://docs.asp.net/en/latest/fundamentals/static-files.html 设置静态资源根目录 在 Startup.cs 中的 Configu ...
- [转]C#中调用资源管理器(Explorer.exe)打开指定文件夹 + 并选中指定文件 + 调用(系统默认的播放类)软件(如WMP)打开(播放歌曲等)文件
原文:http://www.crifan.com/csharp_call_explorer_to_open_destinate_folder_and_select_specific_file/ C#中 ...



