问个最容易捞分的问题:我在数据库中用boolean定义字段,但想在DBGRID中用"结帐"或"末结帐"来表示,如何实现?

解决方案 »

  1.   

    如果用DBGRIDEH的话,比较简单,设置KEYLIST 和PICKLIST即可如果用DBGRID的话,
    procedure TFrmMain.DBGrid1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumn;
      State: TGridDrawState);
    var
      sStr :string ;
    begin
      if AdoQuery.FieldByName('Field').AsBoolean then
        sStr := '结帐'
      else
        sStr := '末结帐' ;
      column.Grid.Canvas.TextRect(rect,rect.left,rect.Top,sStr);
    end;
      

  2.   

    procedure TForm1.ADODataSet1PasswordGetText(Sender: TField;
      var Text: String; DisplayText: Boolean);
    begin
      if adoDataSet1.FieldByName(sender.FieldName)..AsBoolean then
          Text :='Puma True  '
       else
          Text :='Puma False '
    end;
      

  3.   

    显示这样就够了. 在 dataset 的 GetText 事件里写点就行了.
      

  4.   

    如果是显示直接用sql就行了,
    select aaa, iif(bbb, '结账','未结帐') from xxx
      

  5.   

    Table1.Open;
    TBooleanField(Table1.FieldByName('FieldName').DisplayValues := '结账;不结账';
      

  6.   

    Table1.Open;
    TBooleanField(Table1.FieldByName('FieldName')).DisplayValues := '结账;不结账';
      

  7.   

    下拉可设置字段(dbgrid中)的picklist属性设置。
    在DBGRID中用"结帐"或"末结帐"来表示,可通过写字段(数据集中)的ongettext和onsettext事件设置。
    例:ongettext中
      if sender.value=true then
        text := '结帐';
      

  8.   

    建两个表
    表一:
    JZH: Boolean;
    …………//你的表字段
    表二://用于设置表一与文本的关连
    JZH: Boolean
    JZHText: string//中文“结帐”,“未结帐”;
    用两个table控件分别连接两个表。
    在表一的table中新建一字段:
    field properties-type为string
    field type为lookup
    然后设置definition就可以了如果还不明白,留下mail,我发个范例给你
      

  9.   

    在dbgrid的关联数据集上,接管该字段的OngetText和onSetText两个方法如:
     Query1.FieldByName('布尔字段名').onSetText := mySetText;
     Query1.FieldByName('布尔字段名').onGetText := myGetText;procedure Tform1.mygettext(sender:Tfield;var Text:string;DispText:boolean);
    begin
      if Sender.Value =NULL then
        exit;
      if sender.FieldName)='布尔字段名' then
      begin
        if sender.value then
        
          text := '结账'
        else
          text := '未结帐';
      end;
    end;procedure Tform1.mysettext(sender:Tfield;const Text:string);
    var
      i:integer;
    begin
      if Text ='' then
      begin
        sender.Value := '';
        exit;
      end;
      if sender.FieldName='布尔字段名'  then
      begin
        if text='结账' then
           sender.value := true 
        else
           sender.value := false;
      end;
    end;供你参考
      

  10.   

    当然该字段的pictlist应该加如 结账 未结帐两行(接上)
      

  11.   

    同意older,这个方法是最好的
    利用dataset的settext和gettext这两个方法就能达到你的要求
    而不需要增加表结构或者增加什么picklist之类的东东