如何根据表值为cxgrid着色?

use*_*539 4 delphi devexpress tcxgrid

我希望特定字段名称"hello"的所有行都显示为绿色.我试过这个customdrawcell:

if abstable1.fieldbyname('somename').asstring = 'Hello' then
  cxgrid.canvas.brush.color:=clGreen
Run Code Online (Sandbox Code Playgroud)

但它不会工作......我在这里错过了什么?

Sam*_*m M 9

对单个列或网格对象使用OnGetContentStyle事件.样式比使用画布更容易使用.

  • 是的,100%。样式更容易使用,也更安全。通过将选择样式的逻辑与每种样式的呈现方式分开,您可以自由更改其中一种,而不会损害其他样式(例如HTML和CSS)。除此之外,由于样式可以在不同的网格之间共享,因此还可以提高可重用性和标准化。 (2认同)

ave*_*ore 6

您需要查看每个视图行的内部数据,而不是表中当前位置的数据。还可以利用 OnCustomDrawCell() 事件中提供的画布。

procedure TForm1.YourViewCustomDrawCell(
  Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
  AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if(AViewInfo.GridRecord.Values[YourColumn.Index] = 'Hello') then
    ACanvas.Brush.Color := clGreen;
end;
Run Code Online (Sandbox Code Playgroud)


小智 5

不要尝试更改网格中的画布颜色.相反 - 而且我发现这总是正确的 - 在View的OnDrawCell处理程序中更改颜色,如下例所示:

procedure T_fmTabSnapList.View1CustomDrawCell(Sender: TcxCustomGridTableView;
  ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
  if abstable1.fieldbyname('somename').asstring = 'Hello' then 
    ACanvas.Brush.Color := clGreen
end;
Run Code Online (Sandbox Code Playgroud)

cxGrid只是Views的容器.视图是所有绘画发生的地方.小号