簡體   English   中英

DBGrid - 如何設置單獨的背景顏色?

[英]DBGrid - How to set an individual background color?

我正在使用Delphi 10.2.3並想要更改DBgrid的背景顏色。 例如,我有一個文本列和一個整數列。 根據文本我想要更改整數單元格(在同一行)的顏色,如果該值不為零。

我從如何為DBGrid特殊細胞着色中得到了一些想法 所以我知道如何在OnDrawColumnCell中更改單元格的顏色。 我可以改變文本的背景。 但我仍然沒有弄清楚如何改變另一個細胞的顏色。 當然這很容易,我只是對顯而易見的事情視而不見。

下面的代碼顯示了如何根據同一網格行中另一列中的值更改單元格的背景顏色。

procedure TForm1.FormCreate(Sender: TObject);
var
  AField : TField;
begin
  AField := TIntegerField.Create(Self);
  AField.FieldKind := fkData;
  AField.FieldName := 'ID';
  AField.DataSet := ClientDataSet1;

  AField := TStringField.Create(Self);
  AField.FieldKind := fkData;  // Field size defaults to 20
  AField.FieldName := 'AValue';
  AField.DataSet := ClientDataSet1;

  ClientDataSet1.CreateDataSet;
  ClientDataSet1.InsertRecord([1, 'One']);
  ClientDataSet1.InsertRecord([2, 'Two']);
  ClientDataSet1.InsertRecord([3, 'Three']);

  DBGrid1.DefaultDrawing := False;  // otherwise DBGrid1DrawColumnCell will have no effect
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.Index = 1 then begin
    if Odd(DBGrid1.Columns[0].Field.AsInteger) then
      DBGrid1.Canvas.Brush.Color := clGreen;
  end;
  DBGrid1.DefaultDrawDataCell(Rect, Column.Field, State);
end;

如果要根據未顯示的字段(沒有網格列的字段)的值確定單元格顏色,則只需測試基礎數據集中字段的值,因為邏輯數據集游標始終與當前單元格同步被畫。 例如

    if Odd(DBGrid1.DataSource.DataSet.Fields[99].AsInteger) then
      DBGrid1.Canvas.Brush.Color := clGreen;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM