如果你玩过EXCEL的条件格式化,那么你在这里应该会很容易上手.
数据库和cxgrid的设置,这里就略过了.
右键表格,选择 Edit Layout and Data... 或者 Conditional Fromatting...都可以.这里我们选择 Edit Layout and Data...
然后在弹出的窗口中,选择 Conditional Formatting...
在这里,你可以管理你所有条件格式 ,可以新增,修改或者删除.Applies to是把条件格式应用到哪个字段
你也可以点New Rule...来新增条件格式,然后你就可以看到它的界面如下
如果你英文不好的话,..
点击OK,就可以看到效果了:
前面的几中条件类型都很简单,我们重点来讲讲最后一种,使用公式来完成标记.
在这之前,需要说明一些小知识,网上很难找到的
1.公式里,字符串是用双引号包起来的,单引号你输不进去.
2.公式里的字段是用中括号包起来的.这里有几个细节要讲一下:
2.1 输入 [ 之后 ,你只能输入所有字段标题的首字母. 以下面的图举例, 当你输入 [ 符号之后 ,你只能输入 "G","N","C"中的一个字母,其他的字符,你按了也没用,我就被这个细节坑了一早上
2.2 注意2.1里说的是字段的标题,而不是字段的面板上Name的值.
2.3 如果你 输入的列名首字母是唯一的,那么它会自动补齐右边的 ],比如图中的 [G ,它会自动补齐为 [Group], [N,它会补齐为 [Name],但是如果是 [C ,它只会补齐到 [Count ,右边的 ] 这是不会补齐的,因为它还有另外一个count2.如果你要有count你就手动补上 ],如果你要用count2,你就手动再输入 2,然后它就会自动补齐为 [count2]
3.
<待更正>4. Applies to 意思是让条件格式应用到哪个字段,如果你想整行标记,请选择右边的Apply to record.
5.在TcxGrid的条件格式编辑器中,使用stop if true功能可以在满足某个条件时停止应用后续的条件格式,从而优化条件格式的执行效率,避免不必要的计算。
一般来说,当条件格式中存在多个条件时,如果某个条件已经满足,那么后续的条件就没有必要再进行计算,因为它们不会改变单元格的颜色或样式。这种情况下,可以使用stop if true功能,当某个条件满足时,停止应用后续的条件格式,从而提高条件格式的执行效率。
例如,假设有一个数据表格,需要对其中的数据进行高亮显示,条件格式包括以下两个条件:
1. 如果[销售额]字段大于10000,则将单元格背景色设置为红色。
2. 如果[销售额]字段小于5000,则将单元格背景色设置为绿色。
如果不使用stop if true功能,那么在计算每个单元格的条件格式时,都会执行这两个条件,即使第一个条件已经满足,后续的条件也会被执行。这样会导致不必要的计算,降低条件格式的执行效率。
如果使用stop if true功能,可以将第一个条件设置为stop if true,当[销售额]字段大于10000时,就不会再执行后续的条件,从而提高条件格式的执行效率。
需要注意的是,在使用stop if true功能时,需要根据实际情况设置停止条件,确保条件格式能够正确地筛选出需要高亮显示的数据。另外,在设置停止条件时,建议先测试条件格式的正确性,确保能够正确地高亮显示需要的数据。
6.字符串处理用Left,Right,Mid,其中,Left和Righe如果只取一个字符时,第二参数可以不写,比如 Left([Name])="A",注意这里不区分大小写. MID的格式是这样: MID([Name],7,1)="F"
我有尝试使用 + 和 & 来测试字符串拼接,但是都没有成功.AI也在这两个运算符之间不停的道歉...
7.用代码新建条件格式,并应用程序当用:
type TForm1 = class(TForm) cxGrid1: TcxGrid; cxGrid1DBTableView1: TcxGridDBTableView; cxGrid1DBTableView1RecId: TcxGridDBColumn; cxGrid1DBTableView1Group: TcxGridDBColumn; cxGrid1DBTableView1Name: TcxGridDBColumn; cxGrid1DBTableView1Count: TcxGridDBColumn; cxGrid1DBTableView1Count2: TcxGridDBColumn; cxGrid1Level1: TcxGridLevel; dxMemData1: TdxMemData; dxMemData1Group: TStringField; dxMemData1Name: TStringField; dxMemData1Count: TIntegerField; dxMemData1Count2: TIntegerField; DataSource1: TDataSource; cxButton1: TcxButton; cxButton2: TcxButton; cxButton3: TcxButton; procedure cxButton1Click(Sender: TObject); procedure cxButton2Click(Sender: TObject); procedure cxButton3Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.cxButton1Click(Sender: TObject); var ARule: TdxSpreadSheetConditionalFormattingRuleDataBar; begin cxGrid1DBTableView1.ConditionalFormatting.BeginUpdate; cxGrid1DBTableView1.ConditionalFormatting.Add(cxGrid1DBTableView1Count.Caption, TdxSpreadSheetConditionalFormattingRuleDataBar, ARule); ARule.BeginUpdate; try ARule.Style.NegativeBarColor := clRed; ARule.Style.NegativeBarBorderColor := clRed; ARule.Style.PositiveBarColor := clMoneyGreen; ARule.Style.PositiveBarBorderColor := clMoneyGreen; ARule.Style.FillMode := dbfmSolid finally ARule.EndUpdate; end; cxGrid1DBTableView1.ConditionalFormatting.EndUpdate; end; procedure TForm1.cxButton2Click(Sender: TObject); var ARule: TdxSpreadSheetConditionalFormattingRuleIconSet; begin cxGrid1DBTableView1.ConditionalFormatting.BeginUpdate; cxGrid1DBTableView1.ConditionalFormatting.Add(cxGrid1DBTableView1Count2.DataBinding.FieldName, TdxSpreadSheetConditionalFormattingRuleIconSet, ARule); ARule.BeginUpdate; try ARule.PresetName := ConditionalFormattingIconSet.Presets[1].Name; // "3ArrowsGray" ARule.Stops[2].ValueType := cssvtValue; ARule.Stops[2].Value := 7; ARule.Stops[1].ValueType := cssvtValue; ARule.Stops[1].Value := 4; finally ARule.EndUpdate; end; cxGrid1DBTableView1.ConditionalFormatting.EndUpdate; end; procedure TForm1.cxButton3Click(Sender: TObject); begin //给予用户自行设计条件格式的权利 cxGrid1DBTableView1.ConditionalFormatting.ShowRulesManagerDialog; end; end.