表の値に基づいてCXGridを着色する方法
-
08-09-2020 - |
質問
特にフィールド名 'hello'が着色するために存在するすべての行を望みます
緑。私はこれをcustomdrawcell
で試してみました:
if abstable1.fieldbyname('somename').asstring = 'Hello' then
cxgrid.canvas.brush.color:=clGreen
.
しかしそれはうまくいかない...ここで何がありませんか?
解決
グリッド内のキャンバス色を変更しないでください。むしろ、この例のように、常時であるにこれを見つけます -
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;
.
CxGridはビューのためのコンテナだけです。ビューはすべての塗装が発生する場所です。 s
他のヒント
個々の列またはグリッドオブジェクトのOnGetContentStyleイベントを使用します。スタイルはキャンバスとめちゃくちゃにめくることよりもはるかに簡単です。
テーブル内の現在位置のデータを表す各ビュー行の内部データを調べる必要があります。また、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;
. procedure Tfm1.Grid1StylesGetContentStyle(Sender: TcxCustomGridTableView;
ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem;
out AStyle: TcxStyle);
Var
Style1: TcxStyle;
begin
if AItem = nil then exit;
if ARecord.Values[Grid1Med.Index] = true then
AStyle := cxStyleMed;
if ARecord.Values[Grid1CP.Index] = true then
AStyle := cxStyleHost;
if (ARecord.Values[Grid1Med.Index] = true) and
(ARecord.Values[Grid1CP.Index] = true) then
AStyle := cxStyleHostAndCP;
if not VarIsNull(ARecord.Values[colColor.Index]) then
begin
if not Assigned(AStyle) then
AStyle := TcxStyle.Create(Sender);
AStyle.Color := ARecord.Values[colColor.Index];
end;
end;
. これは、私のプログラムからの作業コードです。似たようなものです。
procedure TDoDockets.grDocketsDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
with grDockets do
begin
if (qDocketsOpenCost.asinteger > 1) and (datacol = 5)
then canvas.font.color:= clRed;
if datacol = 9 then // status
if qDocketsColour.Value <> 0
then Canvas.font.color:= tcolor (qDocketsColour.Value);
if datacol = 10 then // attention
if qDocketsAttention.asinteger = 1
then canvas.brush.color:= clRed;
if qDocketsUrgent.asinteger = 1 then canvas.brush.color:= 10092543;
// light yellow
DefaultDrawColumnCell (Rect, DataCol, Column, State);
end
end;
.
grdocketsはグリッドで、qdocketsはグリッド内に表示されているクエリです。表示されている値に応じて、特定の列が異なる色で描画され、1つの場合(QDocketSurgent= 1)、全線の背景色が変更されます。
所属していません StackOverflow