Delphi中如何实现下拉框显示多列?
小的新学Delphi不久,想知道那些可以显示多列的下拉框是如何实现的,比如,我有一部门表,有部门ID有部门名称,我想在一个下拉框中显示两列,部门ID及部门名称,请求各位解答,谢谢(分不够以后补上,呵呵)!

解决方案 »

  1.   

    with adoquery do 
    adoquery.close;
    adoquery.sql.clear;
    adoquery.sql.add('select ID+name as idname from 部门表' )
    adoquery.open;
       for i:=0 to adoquery.RecordCount-1 do
       begin
        cmb1.Items.Add(adoquery.fieldbyname('idname').AsString);
        adoquery.Next;
       end;
      

  2.   

    楼主要的是LookUp字段吧?
    楼上那个就可以,如果是动态抓取数据的话,可以用Eh,自带的也可以,pagkList
      

  3.   

    方法有二: 
    1、自己去重画表格; 
    2、用第三方控件。 
      比如,Ehlib或Infopower 系统控件(如wwGrid)。 www.delphifans.com有下载。
    另外,可参考:
    http://topic.csdn.net/u/20080620/19/69e1ac96-e288-4d3e-91b3-7af6111deda7.html
    控件具体使用方法参考其例子或上网找一下,多得不得了。
    结分吧。
      

  4.   

    自己做个窗口,在上面加一个grid,显示字段自己设定,调用的时候直接调用该窗口
      

  5.   

    如果是在表格里显示,可以用ehlib控件中的表格
    如果是在窗口上显示,可以用虚拟listview
      

  6.   

    with adoquery do 
    adoquery.close; 
    adoquery.sql.clear; 
    adoquery.sql.add('select ID,name from 部门表' ) 
    adoquery.open; 
      for i:=0 to adoquery.RecordCount-1 do 
      begin 
        cmb1.Items.Add(adoquery.fieldbyname('id').AsString+'-'+adoquery.fieldbyname('name ').AsString); 
        adoquery.Next; 
      end; 
    加上'-' 是爲了讓兩列之間能清楚些,也可以不要'-'
      

  7.   

    TcxLookupComboBox->properties->Listcolumn添加多列即可
      

  8.   

    如果有安裝Tcx就可以用TcxLookupComboBox->properties->Listcolumn,或者cxpopupedit也可以。
    如果要簡單1樓的最簡單了,還有就是自己重寫控件。
      

  9.   

    delphi原自带的DBLookupComboBox本来就有这个功能的啊,你只要在其Listfilds中设置多个字段名就可以了,每个字段之间用分号隔开即可。注意表的字段列表中设置字段的显示宽度
      

  10.   

    不知道你既要显示名称,又要显示ID有什么用。但对于一个用户来说,ID显示是没用的。他们看这个ID是没实质意义的。另外下拉列表框只能实现一列数值。要实现2列的话你要不弄个第三方控件或用listview。下拉列表框其实可以同时存名称和ID的。比如:
    with adoquery do 
    adoquery.close; 
    adoquery.sql.clear; 
    adoquery.sql.add('select ID,name from 部门表' ) 
    adoquery.open; 
      while not adoquery.eof do
      begin 
        cmb1.Items.Addobject(adoquery.fieldbyname('name').AsString,tobject(strnew(pchar(adoquery.fieldbyname('name ').AsString)))); 
        adoquery.Next; 
      end; 
    以上只显示名称。但可以获得选中的名称的ID:string(pchar(cmb1.Items.object[cmb1.itemindex]))
      

  11.   

    谢谢各位!!!都留了这么多了,这段时间忙没有空看!问题现在已经解决了,我用了一个第三方控件EHLIB中的 dblookupcomboboxeh,给它的ListSource指定一个数据源,然后它有一个listField属性,要什么列就可以写在那里,然后用";"分隔开来,就可以有这样的效果了,
          Form1.DBLookupComboboxEh1.ListSource:=DataModule1.DataSource1;
          Form1.DBLookupComboboxEh1.ListField:='编号;名称';//要显示的列
          Form1.DBLookupComboboxEh1.KeyField:='编号';//实际的值
          Form1.DBLookupComboboxEh1.ListFieldIndex:=1;//显示的是哪一列,1表示第二列
    这样也可以.
    17的朋友说,既显示ID,又显示名称有什么,其它我认为有用,因为如果有时要选的内容很多的话,用户也知道自己选择是不是对的,名称有些很相似.
    呵呵....总之还是谢谢各位
      

  12.   

    建议用 CxGrid 再结合楼上几位的代码!
      

  13.   

    直接用 
    A001  -- 开发部
    A002  -- 业务部这样显示。哈哈
    要不就只能 OwnerDraw 了