各位高人:我的项目中有大量的字段是数据库定义的 比如:
'0' : 未处理;
'1' : 确认成功;
'2' : 确认失败;
'5' : 逐笔否决;
'8':临时导入
(还有很多其他的,都保存在数据字典表中)
数据库里面保存的是数字 ,显示的时候需要显示成对应的中午意义,查入得时候又要变成对应的数字。现在问题分解成两个问题 1. DBGrid怎么显示成对应的中文 2.怎么查入时候变成对应的数字。
希望能有合理的解决办法。
解决一个也给分!
谢谢!

解决方案 »

  1.   

    你查询的时候可以直接在SQL语句中写啊case 字段 when 0 then '未处理',when 1 then '确认成功'
      

  2.   

    procedure TForm1.DBGridEh1DrawColumnCell(Sender: TObject;
      const Rect: TRect; DataCol: Integer; Column: TColumnEh;
      State: TGridDrawState);
    var
      showStr : String;
    begin
      if Column.Title.Column.FieldName='OutTypeText' then
      begin
        case DBGridEh1.DataSource.DataSet.FieldByName('OutTypeText').AsInteger of
         0 : ShowStr:='未处理';
          1 : ShowStr:='确认成功';
          2 : ShowStr:='确认失败';
          5 : ShowStr:='逐笔否决';
          8 : ShowStr:='临时导入';
        else
         ShowStr:='';
        end;
        DBGridEh1.Canvas.TextRect(Rect,Rect.Left+2,Rect.Top+2,ShowStr);
      end;
    end;
      

  3.   

    用上面的方法,里面DBGrid.DataSource.DataSet里的数据仍然是数字,只是显示时为中文而以,可以放以使用。
      

  4.   

    我用的是dbgrid 没有用ehlib
      

  5.   

    除了在sql中处理好(对access无效)以外 ,你可以双击Grid添加一列,然后在该列的OnGetText事件中写入你的分类说明
      

  6.   

    1. DBGrid怎么显示成对应的中文 
    2.怎么查入时候变成对应的数字。
    两个问题一并解决:使用LookupField查询字段就可以解决问题了。
      

  7.   

    用 CASE
    CASE=WHEN 字段 IS NOT NULL then (select 字段 FROM 数据字典 WHERE ...) END
      

  8.   

    写错
    字段=CASE WHEN 字段 IS NOT NULL then (select 字段 FROM 数据字典 WHERE ...) END
      

  9.   

    SELECT 
           CASE  WHEN  c_custtype <> NULL THEN (SELECT c_caption FROM tdictionary WHERE L_keyno = 1001 AND c_keyvalue = c_custtype )
     END
     FROM vaccoinfo
      

  10.   

    SELECT  
     caption= CASE WHEN c_custtype IS NOT  NULL THEN (SELECT c_caption FROM tdictionary WHERE L_keyno = 1001 AND c_keyvalue = c_custtype )
     END
     FROM vaccoinfo
      

  11.   

    ongettext时,自动根据数据字典取得本表的对照序列,自动予以实现
      

  12.   

    用 PrepositoryItem去指定LookUPDataSet就可以实现了