我想以不同的颜色显示来自tcxgrid的一些行(取决于列值)。
我对它做了更改,但在运行我的项目后没有反映在网格上。
procedure TfrmMessaging.cxGrid1DBTableView1CustomDrawCell(..);
Var
i : Integer;
begin
For i := 0 To cxGrid1DBTableView1.ViewData.RowCount - 1 Do
Begin
If cxGrid1DBTableView1.ViewData.Rows[i].Values[4] = '1' Then
Begin
cxGrid1.Canvas.Brush.Color := clRed;
End;
End;
end;
在上面的代码中我使用了tcxgrid的cxGrid1DBTableView1CustomDrawCell事件。 提前谢谢。
答案 0 :(得分:5)
通常,像这样的东西的最简单的路径是cxStyles。删除表单上的样式存储库,向其添加一个或多个样式,并在对象检查器或事件处理程序(OnGetContentStyle等)中分配它们。
相对于自定义绘图的一个优点是样式被考虑用于各种计算,而所有者绘制的单元格没有被特殊处理,有时也没有正确自动化等。
答案 1 :(得分:4)
如果您使用data-aware view
(看似似乎),则需要使用DataController
代替ViewData
来获取记录。
正如DevExpress对TcxGridDBTableView
的帮助所述(粗体格式是我的):
TcxGridDBTableView对象表示网格表视图的数据感知版本。它继承了其祖先的所有功能,除了数据绑定设置。 TcxGridDBTableView的DataController.DataSource属性提供了View与TDataSet或其后代之间的连接。
除此之外,每个单元格都会触发OnCustomDrawCell
事件,因此您无需迭代行。
以下代码可以帮助您:
procedure TfrmMessaging.cxGrid1DBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
begin
if Sender.DataController.GetValue(AViewInfo.GridRecord.RecordIndex, 4) = '1' then
ACanvas.Brush.Color := clRed;
end;
答案 2 :(得分:1)
我如何更改网格的颜色
procedure TfrmNewOffer.GrdOffDetailViewRemarkCustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
backgroundColorCode: Variant;
textColorCode: Variant;
begin
inherited;
if assigned(AViewInfo) and assigned(AViewInfo.GridRecord) then
begin
backgroundColorCode := AViewInfo.GridRecord.Values[GrdOffDetailViewBackColorCode.Index];
textColorCode := AViewInfo.GridRecord.Values[GrdOffDetailViewTextColorCode.Index];
if not VarIsNull(backgroundColorCode) then
begin
ACanvas.Brush.Color := backgroundColorCode;
end;
if not VarIsNull(textColorCode) then
begin
ACanvas.Font.Color := textColorCode;
end;
end;
端;