有一个数据表,字段是bzw,它里面的内容就是1或者2或者3.
我想要它在dbgrid里显示的时候这样显示:如果是1,就写成“正常”,如果是2,就写成“修改”,如果是3,就写成“异常”,能实现吗?就是这样,原来显示的是:
id  bzw
1    2
2    1
3    1
4    3
我要显示成:
id  bzw
1    修改
2    正常
3    正常
4    异常可以吗

解决方案 »

  1.   


    SELECT ID, CASE WHEN BZW = 1 THEN '正常' 
    WHEN BZW = 2 THEN '修改' 
    WHEN BZW = 3 THEN '异常' 
    ELSE '未知'
    END AS BZW
    FROM YOURTABLE
      

  2.   

    除了在sql中拼接好,还可以在grid中双击添加固定字段,在这个字段的OnGetText中格式化显示的内容
      

  3.   

    一种方法:写Sql语句,用Case,类似1#;
    另一种方法:在数据展示控件(一般是Grid类的)的OnGetText事件中去判断,然后更改展示的数据内容。
    procedure OnGetEditText(Sender: TObject; aCol, ARow: Integer; FieldName: String; Var Value: String);
    begin
      if (FieldName = 'bzw') then
      begin
        if Value = '1' then
          Value := '正常'
        else if Value = '2' then
          Value := '修改'
        else if Value = '3' then
          Value := '异常'; 
      end;
    end;
      

  4.   

    使用DBGRIDEH控件就支持这样啊,属性里有KEYLIST 和PICKLIST 两个属性,KEYLIST里面写你的1、2、3    PICKLIST里面写上对应的显示内容就OK了
      

  5.   

    1楼和4楼的都可以,但估计一楼的方法效率会高点,SQL处理比控件处理应该会快
      

  6.   

    1楼的可行,它是在拿到数据前就改好,如果是拿到数据后再改的话也行,
    写个循环while not cliendataset.eof do
    begin
    if cliendataset.fieldbyname('bzw').asstring:=1 then
    begin
    cliendataset.edit;
      cliendataset.fieldbyname(bzw').asstring:='正常';
    cliendataset.post;
    end
    else if cliendataset.fieldbyname('bzw').asstring:=2 then
    begin
      ...
    end
    else
      ...;
     
    cliendataset.next;
    end;
      

  7.   

    1.SQL中處理:select id, case when bzw = 1 then '正常' 
    when bzw = 2 then '修改' 
    when bzw = 3 then '异常' 
    else '未知'
    end as bzw
    from 表名2.OnGetEditText事件中代碼處理:
     if (FieldName = 'bzw') then
      begin
      if Value = '1' then
      Value := '正常'
      else if Value = '2' then
      Value := '修改'
      else if Value = '3' then
      Value := '异常';  
      end;
      

  8.   

    谢谢,我用了一楼的,相当好用了!!
    其他的我有空也会试试的!
    之前问朋友,告诉我再建一个表,然后写上状态,语句中写LEFT  JOIN zkd_lsb ON zkd_scgl_zxjh.bzw = zkd_lsb.bzw
    好麻烦,还是这个好用!