我在dbgrid的editing dbgrid1.columns picklist里面输入五个字符 但是后台连接数据库里只能设置两个字符 在dbgrid怎么样可以显示出这五个字符呢 当装入数据库时用两个字符表示(数据库只能为两个字符不能增加)
例如 我在dgrid里面选着显示 '上海市’在数据库里装入‘01’
if DBGrid1DataSource.DataSet.Fields[0].AsString:='上海市'  then
begin
DBGrid1DataSource.DataSet.Fields[0].AsString:='01';
end;   请问dbgrid里 有办法实现吗?? 
                                       哪位大哥会的请赐教小弟

解决方案 »

  1.   

    有啊,在数据集字段的OnGetText、OnSetText中做转换
      

  2.   

    ‘OnGetText、OnSetText' 这两个数据集在哪边请问怎么做转换呢?
      

  3.   

    可以办到你可以在dbgride的oncellexit中间写代码
    比如:
      if dbgride.selectindex=0 then
         begin
         if DBGrid1DataSource.DataSet.Fields[0].AsString:='上海市'  then
           begin
           DBGrid1DataSource.DataSet.Fields[0].AsString:='01';
           end;
         end;
      

  4.   

    用dbgrid的event事件中的dataset里面的事件
    如果选择‘上海市’则在beforepost事件添加 dbgrid.field[0].text:='01'显示时在afteropen事件中加入判断的
    例子:
    if DBGrid1DataSource.DataSet.Fields[0].AsString:='01‘then
    begin
    dbgrid.field[0].text:='上海市';
    end;
      

  5.   

    oncellexit?
    用的是delphi的那个版本?
      

  6.   

    上面的方法有一个问题也是我忘了说了就是我的数据库里面只有两个字节但是‘上海市’需要
    六个字节而数据库的字节不可以增加 问题就在于dbgrid是数据感应组件显示的时候空间是和数据库连着的 我想有没有办法解决让它显示的字节比它连的数据库的字节大能呢 可不可以调呢
      

  7.   

    在TField对象的OnGetText,OnSetText事件中作转换。看看帮助。也可看看李维的《DELPHI7高效数据库程序设计》一书。
    原型:
    type TFieldGetTextEvent = procedure ( Sender :TField; var Text:String; DisplayText:Boolean ) of object;
    其中Text参数就是你要让人看到的东西。来看看李维的例子:
    procedure TdmSetGetTextDemo.sdsBooksAIDGetText(Sender: TField;
      var Text: String; DisplayText: Boolean);
    begin
      try
        Self.sqldsPerformersByID.ParamByName('AID').Value := Sender.Value;
        Self.sqldsPerformersByID.Active := True;
        Text := Self.sqldsPerformersByID.Fields[0].AsString;
      finally
        Self.sqldsPerformersByID.Active := False;
      end;
    end;
      

  8.   

    这个东西是sqldataset。
    你想把ID 中的01对上海,02对北京。这些信息应该存在一个表中,叫它CITY。
    你在ONGetText事件中到CITY这个表中找到ID所对应的城市名,然后把它付给TEXT参数就OK了。
      

  9.   

    你要以在DBGrid里嵌入ComboBox,当选择到那列时显示出来,把选择值转一下不就成了。
      

  10.   

    我想ComboBox是几年前的手法了吧.为什么不用TField的Picklist属性呢?
      

  11.   

    我用adoquery连接也可以这样用OnGetText,OnSetText事件吗
      

  12.   

    是怎么样用OnGetText,OnSetText事件处理呢?