如题所示 本人想做个简单的录入 但是其中有几个字段是从其他表里取出数据 用类似下拉框来选择 来填上的,现在本人不知道如何在TDBGRID控件实现下拉框的功能(反正想在TDBGrid中出现下拉框)?
想用TDBgrid+TTable+Datasource 完成,Ttable的属性TableName 为录入记录存放的地方,其中TDBGrid里有几个字段从别的表里取,用下拉框显示,由用户选择.现在我已经知道怎么在tdbgrid中出现下拉框了  只需在tdbgrid中添加字段后 利用picklist属性则可。
现在又又问题:下拉框的值(若此对应字段为水果) 比如 苹果,梨,香蕉...等等,也就是说picklist里的值应该是动态的 不应该写死在picklist属性  而是应该通过比如Tquery控件从相关的表把水果种类查出来后 再付给picklist的。问题是我用Tquery控件查出来后,无法付给picklist属性,因为picklist属性为Tstring型,而 Tquery查出来的字段值是String型,不匹配。哎呀!怎么弄才好呢?请大家指点迷津啊

解决方案 »

  1.   

    var   abc:strings;   
      begin   
        abc:='苹果';//这个是你自己的东西   
        dbgrid1.columns[4].picklist.add(abc);   
          
      end;
      

  2.   

    谢谢brightyang!问题已经解决了。你的方法等我把手头工作做完再试试,我是利用Ttable的字段有个lookup属性完成的。 
      

  3.   

    呵呵.....条条大路通罗马只是以前看到某本书上写的dbgrid下拉框居然是用在点的地方去create combobox的控件,当时我就郁闷了
    dbgrid的功能自已没研究好居然去写书,还误导读者,实在是不应该啊
      

  4.   

    自己写个过程 用到的地方调用一下不就行了?比如
    procedure SetGridCbx(sSQL: string; cbx: TColumnEH; conn: TADOConnection;
                        bAllowNull: Boolean=False; sNullValue: string=''; sNullItem:string='');
    var
      Tmp: TADOQuery;
    begin
      Tmp := TADOQuery.Create(Nil);
      try
        with Tmp do
        begin
          Connection := conn;
          Close;
          SQL.Clear;
          SQL.Add(sSQL);
          Open;
          First;
          if bAllowNull then
          begin
             cbx.PickList.Add(sNullItem);
             cbx.KeyList.Add(sNullValue);   
          end;
          while not Eof do
          begin
            cbx.PickList.Add(Fields[0].AsString+'|'+Fields[1].AsString);
            cbx.KeyList.Add(Fields[0].AsString);
            Next;
          end;     
        end;
      finally
        Tmp.Close;
        Tmp.Free;
      end;
    end;
    用到的时候
    SetGridCbx('select WJXX_KJBH,WJXX_KJMC from WJXX  order by WJXX_KJBH ',DBGridEh.FieldColumns['KJZMX_KJBH'],Self.DBConnect,True);
    就可以从数据表中获取值 给 picklist
      

  5.   

    begin
    dbgrid1.coloumn[0].picklist.cliear;
    query1.first;
    repeat
    dbgrid1.coloumn[0].picklist.add(query1.fieldbyname('水果').asstring);
    query1.next;
    until query1.eof;
    end;
      

  6.   

    picklist,这个是关键,动态加载就可以实现了。
      

  7.   

    呵呵,那本书,我也看过。那时,刚学DELPI,还照着书上的例子做过。