用DBGrid显示记录时?怎么替换指定列下的指定值?(100分)

  • 主题发起人 主题发起人 zdqyundou
  • 开始时间 开始时间
Z

zdqyundou

Unregistered / Unconfirmed
GUEST, unregistred user!
我用DBGrid显示数据,那么A字段下有'ABC'的值.那么怎么在DBGrid显示时全部替换为DEF?
 
在OnDrawColumnCell事件里:
procedure TDm_MainForm.DBGrid_CellDataViewDrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
var
TmpStr: string;
TmpRect: TRect;
TmpGrid: TDBGrid;
TmpStatus: Integer;
TmpDataSet: TDataSet;
begin
TmpDataSet := (Sender as TDBGrid).DataSource.DataSet;
if (FCurCellDB <> '') and (TmpDataSet = FQuery) and (TmpDataSet.RecordCount >
0) then
begin
TmpGrid := Sender as TDBGrid;
TmpGrid.Canvas.FillRect(Rect);
TmpRect := Rect;
TmpStr := '';

case DataCol of
1: {A字段}
if TmpDataSet.FieldbyName('A').AsString = 'ABC' then
TmpStr := 'DEF';
.......
9: {'tdd_btime'}
TmpStr := SecToTime(TmpDataSet.FieldbyName('tdd_btime').AsInteger);
else
TmpGrid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
exit;
end;

DrawText(TmpGrid.Canvas.Handle,
pChar(TmpStr),
Length(TmpStr),
TmpRect, // 包含文字的矩形
DT_CENTER or // 水平居中
DT_SINGLELINE or // 不折行
DT_VCENTER); // 垂直居中
end;
end;
 
假设你和dbgrid连接的数据表是adotable,你为当前form建立一个下面的过程,
procedure TForm1.FormCreate(Sender:TObject);
begin
ADOTable1.FieldByName('收银员').OnGetText:=myprocedure;
end;
procedure TForm1.myprocedure(Sender:TField; var Text:string; DisplayText:Boolean);
begin
Text:='DEF';
end;
这样就可以了
 
后退
顶部