2012-09-27 64 views
0

以前使用默認的DBGrid,我可以更改單元格的值,而不必使用以下代碼更改數據庫中的數據。如何修改DrawCell上數據庫字段的文本? TcxGrid

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; 

回答

2

我想,爲什麼你沒有看到cxGridCDBTableView1CustomDrawCell()完成溺水的原因是因爲你沒有在ADone參數設置爲true - 因此默認畫會「取消」(overpaint)你的。然而,我認爲實現你之後的正確方法是使用列的事件OnGetDisplayTextOnGetContentStyle(後面的事件是樣式的子屬性,即Column.Styles.OnGetContentStyle)。

+0

謝謝你的工作,但關於使用列事件的好處。你是否預見到在drawcell事件上做任何問題? – Trevor

+0

我認爲列事件是更有前途的證據,但在簡單情況下,drawcell應該也可以。 – ain

+0

好的,謝謝。 – Trevor