如性别字段:值为0和1 ,希望在dbgrid中显示男和女,请高手不吝指教。

解决方案 »

  1.   

    可以这样写:控件有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中显示的性别值就是“男”或“女”。
      

  2.   

    有两种方法:
    一个是使用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;
      

  3.   

    select sex=(case sex when 0 then '男' else '女' end) from Table
      

  4.   

    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;
      

  5.   

    个人认为,用lookup字段比较好:动态,易扩充
      

  6.   

    Lookup需要数据集组件使用永久字段,在某些场合不太合适,不过,
    Lookup应当是解决此类问题的较好办法之一