可以这样写:控件有dbgrid1,datasource1,query1。datasource的dataset属性值为query1,dbgrid1的datasource属性选择datasource1, 其中,query1的CacheUpdates,RequestLive,UniDirectional这三个属性值设为true procedure TForm1.Button1Click(Sender: TObject); var sq:string; i:integer; begin sq:='select * from db1 where xb='+'''1'+''''; with query1 do begin close; sql.Clear; sql.Add(sq); prepare; open; i:=recordcount; while (i>0) do begin edit; fieldbyname('xb').asstring:='男'; i:=i-1; next; end; end; end; 同样的方法可以替换“0”时的性别值为“男”。 这样修改但不提交,于是在dbgrid1中显示的性别值就是“男”或“女”。
有两种方法: 一个是使用lookup字段,也就是另一个表中会记录数字和汉字的关系,如0--男 一个是在用GetText事件 procedure TfmMain.ADOQuery1GenderGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin if Sender.Value = 0 then text:= '男'; if Sender.Value = 1 then text:= '女'; end;
select sex=(case sex when 0 then '男' else '女' end) from Table
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); VAR M_COLOR:TCOLOR; M_CHANGEKIND:INTEGER; M_CHANGENAME:string; begin with wagedata.SQLLABORAGE_CHANGE_LOG do begin M_CHANGEKIND:= FieldByName('SEX').asINTEGER; case m_changeKind of 1: begin M_COLOR:=CLBLUE; M_CHANGENAME := '男' ; END; 2: begin M_COLOR:=CLRED; M_CHANGENAME := '女' ; end; else begin M_COLOR:=CLBLACK; M_CHANGENAME := '不男不女' ; end; end; (SENDER AS TDBGRIDEH).Canvas.Font.Color := M_COLOR; end; (SENDER AS TDBGRIDEH).DefaultDrawColumnCell(Rect, DataCol, Column,State); if ansicomparetext(Column.FieldName,'SEX')=0 then column.Grid.Canvas.TextRect(rect,rect.left,rect.Top,M_CHANGENAME);end;
其中,query1的CacheUpdates,RequestLive,UniDirectional这三个属性值设为true
procedure TForm1.Button1Click(Sender: TObject);
var sq:string;
i:integer;
begin
sq:='select * from db1 where xb='+'''1'+'''';
with query1 do
begin
close;
sql.Clear;
sql.Add(sq);
prepare;
open;
i:=recordcount;
while (i>0) do
begin
edit;
fieldbyname('xb').asstring:='男';
i:=i-1;
next;
end;
end;
end;
同样的方法可以替换“0”时的性别值为“男”。
这样修改但不提交,于是在dbgrid1中显示的性别值就是“男”或“女”。
一个是使用lookup字段,也就是另一个表中会记录数字和汉字的关系,如0--男
一个是在用GetText事件
procedure TfmMain.ADOQuery1GenderGetText(Sender: TField; var Text: String; DisplayText: Boolean);
begin
if Sender.Value = 0 then text:= '男';
if Sender.Value = 1 then text:= '女';
end;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
VAR
M_COLOR:TCOLOR;
M_CHANGEKIND:INTEGER;
M_CHANGENAME:string;
begin
with wagedata.SQLLABORAGE_CHANGE_LOG do
begin
M_CHANGEKIND:= FieldByName('SEX').asINTEGER;
case m_changeKind of
1:
begin
M_COLOR:=CLBLUE;
M_CHANGENAME := '男' ;
END;
2:
begin
M_COLOR:=CLRED;
M_CHANGENAME := '女' ;
end;
else
begin
M_COLOR:=CLBLACK;
M_CHANGENAME := '不男不女' ;
end;
end;
(SENDER AS TDBGRIDEH).Canvas.Font.Color := M_COLOR;
end;
(SENDER AS TDBGRIDEH).DefaultDrawColumnCell(Rect, DataCol, Column,State);
if ansicomparetext(Column.FieldName,'SEX')=0 then
column.Grid.Canvas.TextRect(rect,rect.left,rect.Top,M_CHANGENAME);end;
Lookup应当是解决此类问题的较好办法之一