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()原因是因为您没有将ADone参数设置为true- 因此默认绘画将“取消”(过度绘制)您的。

但是,我认为实现你所追求的正确方法是使用列的事件OnGetDisplayTextOnGetContentStyle(后面的事件是样式的子属性,即Column.Styles.OnGetContentStyle)。

于 2012-09-27T18:31:42.673 回答