CxGrid 改变某行或单元格的颜色
CxGrid 改变某行或单元格的颜色
一个表(T)的结构结构如下.
ID Test
1 2001
2 1444
3 1788
5 2645
6 4568
cxGrid成功连接到该表, 如果要实现单元格特效, 就要在cxGridDBTableView的 OnCustomDrawCell
写代码. 该事件声明原形为
type
TcxGridTableDataCellCustomDrawEvent = procedure(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean) of object;
参数 Sender: 你要实现特效的TableView; ACanvas: 画布, 这个参数比较重要, 就是用这个参数画出
特效; AViewInfo: 自定义条件的来源; 从这个参数中获取单元格值; ADone: 设为真就不会Paint.
下面是以 Test字段的值来控件单元格颜色
var
CheckValue: integer;
cxColumn: TcxGridColumn;
begin
cxColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Test');
if cxColumn = nil then
Exit;
//这个条件用来限制是否只Paint指定的单元格, 去掉则Paint整行.
if SameText(AViewInfo.Item.Name, cxColumn.Name) then begin
CheckValue := AViewInfo.GridRecord.Values[gdtvTestTest.Index]; //获取单元格
//以下是满足条件的字体变色
if CheckValue >= 4000 then //大于4000为红色
ACanvas.Font.Color := clRed
else if CheckValue >= 3000 then //大于3000绿色
ACanvas.Font.Color := clGreen
else if CheckValue >= 2000 then //大于2000蓝色
ACanvas.Font.Color := clBlue;
//以下是满足条件的数据背景变色
{if CheckValue >= 4000 then begin //大于4000为红色
AViewInfo.Focused;
ACanvas.Brush.Color := clRed
end
else if CheckValue >= 3000 then //大于3000绿色
ACanvas.Brush.Color := clGreen
else if CheckValue >= 2000 then //大于2000蓝色
ACanvas.Brush.Color := clBlue; }
end;
end;
以上内容为转贴,在使用过程中,发现作者固定了字段Test,而我遇到的问题是:客户提出对cxGrid中不可编辑的列用特别的颜色标记,这时候,字段就不是固定的,于是对上面的代码做了改造:
procedure TForm1.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
cxColumn: TcxGridColumn;
aFieldName:String;
begin
aFieldName:=TcxGridItemDBDataBinding(AViewInfo.Item.DataBinding).FieldName;
//引用 cxGridDBDataDefinitions单元,才支持TcxGridItemDBDataBinding类.这行取出当前列的字段名
cxColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName(aFieldName);//按字段名取出Column对象
if not cxColumn.Options.Focusing then//不允许编辑的列标记为特殊颜色.
ACanvas.Brush.Color:=clRed;
end;
上面的代码,实现当cxGrid中某一列.Options.Focusing:=False时,用红色显示.
最后证明,下面这个方法是可行的
比如AViewInfo.Item.ID in [i, j] 或AviewInfo.RecordViewInfo.GridRecord.Values[i]为第i列符合条件的值.
if (AViewInfo.Item.ID in [6, 7]) and (trim(AViewInfo.RecordViewInfo.GridRecord.Values[8]) = 'T') then
begin
ACanvas.Brush.Color := clmoneygreen;
ACanvas.Font.Name := 'Times New Roman';
ACanvas.Font.Size := 10;
ACanvas.Font.Color := clCaptionText;
end;
CxGrid 改变某行或单元格的颜色的更多相关文章
- gridview根据条件来改变行的颜色以及改变单元格的颜色。
gridview根据条件来改变行的颜色以及改变单元格的颜色. 通过在RowDataBound事件中写代码来实现,见代码. protected void GridView1_RowDataBound(o ...
- 改变DataGrid某一行和单元格的颜色
前段时间做WPF项目,需要改变DataGrid某一行的颜色.高度,以及某个单元格的颜色.单元格字体的颜色,自然就必需取到datagrid的一行和一行的单元格,网上也是搜索了好久才找到,记录下来便于使用 ...
- Devexpress Winform Gridcontrol 中根据条件单元格的值改变单元格的颜色等属性。
提供一下三种方法 1.使用设计器 点击gridcontrol控件,run designer,format Condtions, add,然后进行各种条件的设置. 2.用代码代替设计器. 实例代码: p ...
- ExtJs GridPanel 给表格行或者单元格自定义样式
Ext.onReady(function(){ Ext.create('Ext.data.Store', { storeId:'simpsonsStore', fields:['name', 'ema ...
- zclip结合easyui实现复制datagrid每行特定单元格数据的功能
在easyui的datagrid里面,实现复制每行特定单元格的功能,关键是想想如何获取到每个单元格的数据,功能是点击按钮"复制",然后复制object的下载地址,截图如下所示: 进 ...
- (转载)WPF:DataGrid设置行、单元格的前景色
WPF:DataGrid设置行.单元格的前景色 0. 说明 /********************************** 本示例实现功能1.DataGrid基本操作2.列标题样式3.内容居中 ...
- table、tr、td表格的行、单元格等属性说明
table.tr.td表格的行.单元格等属性说明 <table>标签定义HTML表格.简单的HTML表格由table元素以及一个或多个tr.th或td元素组成. tr元素定义表格行,th元 ...
- Easyui之datagrid实现点击单元格修改单元格背景颜色
前段时间有个需求中有点击datagrid的单元格实现某种事件,调用datagrid的onclickCell这个方法很容易实现,但是体验不好啊,完全不知道自己刚才点击的是哪个单元格,然后就尝试单击单元格 ...
- X5学习笔记—给单元格添加颜色
设置grid某一个单元格的颜色 可以用dhtmlxgrid的原生态方法 setCellTextStyle (row_id, ind, styleString) 参数: rowid:行id cellin ...
随机推荐
- Codeforces 749C. Voting 模拟题
C. Voting time limit per test: 1 second memory limit per test: 256 megabytes input: standard input o ...
- Python配置工具类ConfigParser使用
ConfigParser模块定义了类ConfigParser,用于实现配置文件解释器.该模块ConfigParser在Python3中,已更名为configparser. 一,函数介绍 1.读取配置文 ...
- Java中的四种内部类
Java中有四种内部类: 成员内部类:定义在另一个类(外部类)的内部,而且与成员属性和方法平级,故称成员内部类.类比于外部类的非静态方法,如果用static修饰就变成了静态内部类 静态内部类:使用st ...
- 在HashTable上下文中,同步指的是什么?
同步意味着在一个时间点只能有一个线程可以修改hash表,任何线程在执行HashTable的更新操作前都需要获取对象锁,其他线程需要等带锁的释放.
- [Chrome Headless + Python] 截长图 (Take Full-page Screenshot)
# -*- coding: utf-8 -*- import time import os from selenium import webdriver from selenium.webdriver ...
- 几张图片帮助记忆docker基本原理(转)
写的非常好的一篇文章,不知道为什么被删除了. 利用Google快照,做个存档. 快照地址:地址 作者地址:青牛 什么是dockerDocker 是一个开源项目,诞生于 2013 年初,最初是 dotC ...
- 求一个数的n次幂
1.当这个数是2的多少次幂: 求(2^m)^n = 2^(m*n) = 1<<m*n; 2.快速幂(要考虑底数a,和m的正负) int quick_mod(int a,int m){ ...
- jetbrains产品的一些使用技巧
取消界限: 设置默认字符长度的准线,在图一中进行修改目前上限是1000 快捷键的使用: crtl+D:复制当前代码,获取多个类似内容的时候可以直接使用. crtl+F:查找代码中的内容,可以使用正则表 ...
- Eclipse的SVN插件使用
1 eclipse的SVN插件使用 1.1 svn插件安装 下载Subversion的eclipse插件 http://subclipse.tigris.org/servlets/ ...
- Excel2007VBA数组和工作表及单元格的引用
动态数组使用: https://zhidao.baidu.com/question/1432222709706721499.html 使用Redim动态数组即可. 1 2 3 4 5 6 7 8 Su ...