DBGrid绑定数据源,数据库中用1、0代表男、女,想在DBGrid的性别列中不显示代码1、0而对应显示男、女,不知怎么实现?
    另DBGrid能实现整行选取吗?我还想实现奇、偶行显示不同的颜色?

解决方案 »

  1.   

    整行选取
    dbgrid的option里面把dgRowSelect置为true.
      

  2.   

    要实现显示'男','女',需要自己'画'dbgrid,设置dbgrid的defaultdrawing为false,然后实现
    dbgrid的OnDBGrid1DrawColumnCell时间
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if Column.FieldName='性别字段' then
       if Column.Field.asineger=0 then
         Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'女')
       else
         Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'男');
    end;
      

  3.   

    在你的Query1中做计算字段,在计算事件中写代码
    if Query1.FieldByName('Sex').asstring = '1'
      Query1.FieldByName('计算字段名').asstring := '男'
    else
      Query1.FieldByName('计算字段名').asstring := '女'
      

  4.   

    Q1, 在DataSet的每个Field中的属性使用DisplayText来实现,例如:
       if Field.value = 1 then 
         Field.DisplayText := 男
       else
        Field.DisplayText := 女
    Q2. 在dbGrid的OnDrawDataCell事件上加上代码来控制。
      

  5.   

    sorry ,漏写东西了procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    begin
      if Column.FieldName='性别字段' then
       if Column.Field.asineger=0 then
         Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'女')
       else
         Dbgrid1.Canvas.TextOut(Rect.Left+2,Rect.Top+3,'男')
      else
          DBgrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    end;
      

  6.   

    实战Delphi数据网格色彩特效Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。
    以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。
    1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示以区别相邻的数据列。
    file://在DbGrid的DrawColumnCell事件中编写如下代码:
    Case DataCol Mod 2 = 0 of
    True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
    False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
    End;
    DbGrid1.Canvas.Pen.Mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。
    file://将上述代码修改为:
    Case DataCol Mod 2 = 0 of
    True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
    False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
    End;
    If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
    DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
    DbGrid1.Canvas.Pen.Mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
    上述两种方法突出了列的显示效果。
    3.在数据网格中以红色突出显示当前选中的行。
    设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色)在DbGrid的DrawColumnCell事件中编写如下代码:
    if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
    DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
    DbGrid1.Canvas.pen.mode:=pmmask;
    DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
    4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。
    file://其它属性设置同3,将上述代码修改为:
    if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
    begin
    Case DataCol Mod 2 = 0 of
    True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
    False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
    DbGrid1.Canvas.pen.mode:=pmmask;
    DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
    end;5.横向斑马线, 同时以红色突显当前行效果。
    file://其它属性设置同3,将上述代码修改为:
    Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
    True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
    False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
    end;
    if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then file://选中行用红色显示
    DbGrid1.Canvas.Brush.color:=clRed;
    DbGrid1.Canvas.pen.mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
    6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。
    file://其它属性设置同3,将上述代码修改为:
    Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
    True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
    False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
    end;
    If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
    Case DataCol mod 2 = 0 of
    True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
    False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
    end;
    DbGrid1.Canvas.pen.mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (RectDataColColumnState);
      

  7.   

    在字段的ONGETTEXT写上
    procedure TForm1.Query1INTDIRECTIONGetText(Sender: TField;
      var Text: String; DisplayText: Boolean);
    begin
       IF SENDER.Value =1 THEN TEXT:='男'
       ELSE IF SENDER.Value =0 THEN TEXT:='女';
    end;