0

以前はデフォルトのDBGridを使用して、次のコードを使用してデータベース内のデータを変更せずにセルの値を変更できました。

procedure TEMRForm.DBGridCDrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.FieldName = 'START_DATE' then
  begin
    DBGridC.Canvas.FillRect(Rect);          
    DBGridC.Canvas.TextOut(Rect.Left+2,Rect.Top+2,Column.Field.Text + ' *');
  end;
end;

これはうまくいきましたが、cxgridにこれと同じ種類の機能を実装するのに問題があります。これが私の現在のコードで、セル値が変更されていることを示していません。

procedure TEMRForm.cxGridCDBTableView1CustomDrawCell(
Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
ARect: Trect;
begin
  ARect := AViewInfo.Bounds;
  if AViewInfo.Item.Caption = 'Start Date' then
  begin
    ACanvas.FillRect(ARect);
    ACanvas.TextOut(ARect.Left+2,ARect.Top+2,TableC.FieldByName('START_DATE').AsString+' *');
  end;
end;
4

1 に答える 1

2

描画が行われていないのは、パラメータをにcxGridCDBTableView1CustomDrawCell()設定していないためだと思います。したがって、デフォルトのペイントはあなたのペイントを「キャンセル」(オーバーペイント)します。ADonetrue

ただし、私はあなたが後にすることを達成するための正しい方法は、列のイベントを使用することであると思いますOnGetDisplayTextOnGetContentStyle後のイベントはスタイルのサブプロパティですColumn.Styles.OnGetContentStyle

于 2012-09-27T18:31:42.673 に答える