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时,用红色显示.

时间: 2024-11-14 13:15:43

CxGrid 改变某行或单元格的颜色的相关文章

C#对gridView的列和行以及单元格进行颜色设置

①字体 其中gridView是gridView的Name(下同) gridView[column, row].Style.ForeColor = Color.Red;//设置第row行column列的单元格字体颜色 gridView.Rows[row].DefaultCellStyle.ForeColor = Color.Red;//设置第row行的行字体颜色gridView.Columns[column].DefaultCellStyle.ForeColor = Color.Yellow;//

ExtJS4.2 Grid知识点三:改变表格Grid单元格背景颜色

在ExtJS4.2 Grid知识点一:改变表格Grid单元格文字颜色一文中讲解了如何改变单元格中文字颜色,接下来在本章学习如何改变Grid中单元格的背景颜色,显示结果如图片: 在线演示  /  示例代码 实现方式同样是为Grid中该列自定义renderer函数,查询ExtJS 4.2 API得知,Ext.grid.column.Column的renderer属性可以是一个函数也可以是字符串,这个知识点是通过函数来实现的.函数参数列表如下: value : 当前待渲染的单元格值,即表格中某行某列的

改变DataGrid某一行和单元格的颜色

前段时间做WPF项目,需要改变DataGrid某一行的颜色.高度,以及某个单元格的颜色.单元格字体的颜色,自然就必需取到datagrid的一行和一行的单元格,网上也是搜索了好久才找到,记录下来便于使用. 1.前台WPF界面添加一个DataGrid控件,并添加两列(便于编写,达到目的即可) <DataGrid AutoGenerateColumns="False" Height="642" HorizontalAlignment="Left"

控制extsj4.1 gridpanel表格行或者单元格的编辑

情境描述: 如上图是一个可编辑的gridpanel表格,现在需要做的是让第一行不能编辑,第二行可以编辑,或者这两行中一行的任意一个表格可编辑,另一行的该表格不可编辑. 这个问题其实就是控制单元格的编辑,有两种实现方式. 方式1,在CellEditing插件的beforeedit事件中控制,看一个代码截图 定义一个二维数组,对应表格的单元格,如果想让哪个单元格不可编辑,就在数组中对应的值为false,然后在beforeedit事件中return该数组的值,当然实际开发中可以灵活生成editable

c#winform中如何修改ListView控件每个单元格的颜色

ListView在View属性为Details的时候它呈现的方式和DataGirdView差不多,它的每一行都是一个ListViewItem,然而每个ListViewItem都有一个BackColor的属性,但是设置了这个属性却没有任何作用.因为是ListView的每一行的样式都继承的父控件的样式所以无法改变. 解决方案: ListViewItem item; item = new ListViewItem(new string[] { "NAME","" });

NPOI Excel 单元格背景颜色对照表

NPOI Excel 单元格颜色对照表,在引用了 NPOI.dll 后可通过 ICellStyle 接口的 FillForegroundColor 属性实现 Excel 单元格的背景色设置,FillPattern 为单元格背景色的填充样式. NPOI Excel 单元格背景颜色设置方法以及颜色对照表: 1 2 3 4 5 6 ICellStyle style = workbook.CreateCellStyle(); style.FillForegroundColor = NPOI.HSSF.U

怎样将Excel包含某字符的单元格填充颜色

在处理数据的时候,xmyanke想将Excel中包含某字符的单元格填充蓝色,比较容易看清,弄了好一阵子都没完成,最后试用条件格式处理了一下,终于实现了. 比如要将A1到A12区间包含数字1的单元格填充成蓝色,点击A1按shift键再点击A12选中A1:A12区间所有单元格,在菜单栏中选“格式”-“条件格式” 在弹出的条件格式对话框中选“单元格数值”“等于”“1”,点击“格式”按钮,弹出的单元格格式对话框中的“图案”选项,选择蓝色单元格底色,确定 这样设置以后,Excel包含某字符的单元格填充颜色

DevGridControl单元格背景色和单元格文字颜色设置

1.拖一个gridControl控件在 窗体上 2.添加三列 分别是 BgColor,BgColor2 , FontColor  分别显示单元格颜色 单元格渐变颜色 单元格字体颜色 public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { List<object> list = new Li

EXTJS根据值Value改变gridpanel单元格背景颜色或者设置整行字体颜色

第一步. 设置样式 .reportColor4{background: #93A9C1;}.reportColor5{background: #EEEEEE;} 第二步.修改单元格样式 header : '流通类型',width : 80,sortable : true,align : 'center',dataIndex: 'BR_TYPE',// css : 'background: #acdaf4;', // ----- 设置整个单元格的样式,但是不能根据条件变化renderer:func