我在使用TAdoquery控件和TDBGridEh控件(EhLid)操作数据库时,怎样实现某列的下拉数据(这些下拉数据来自另一个数据表)。
例如:
销售表:商品id,客户id,……(其它信息)
其中商品id来自商品信息表(表id);客户id来自客户信息表(表id)TDBGridEh控件显示销售表信息,但是我希望它的商品id和客户id列是下拉列表,列表内容是相应的基础信息表的内容,如何实现?简单描述如上,好心的同志们,请加我的QQ41811346

解决方案 »

  1.   

    创建两个StringList,将你要的客户ID,名称分别添加到两个StringList中,再这样指定属性 
    dbgrideh1.columns[i].PickList:=stringlist1; i为你要的指定显示的列
      

  2.   

    谢谢,我不希望用list,dataset有一个有关lookup的东东,能不能使用那个?
    lookupdatasource……这一系列属性设置正确应该是可以实现,具体怎么实现呢?
      

  3.   

    Ehlib安装后,自带的DEMO里面就有你想要的源代码例子呀! 装完控件一定要看一下DEMO 和SOURCE这两个呀.
      

  4.   

    最好不用LOOKUP字段, 如果用只需要在TADOQUERY上击,然后在弹出的字段列表界面用鼠标右键弹出菜单选择NEW FIELD,建立LOOKUP字段,但是如果是数据量大的时候,一条数据的一个LOOKUP字段就会触发一次数据库的SQL查询,这个工作量是很大的.
    如果真的需要用,有要考虑效率的话,可以在程序启动的时候把这个基础数据表下到本地然后在本地表上做LOOKUP.
    不需要的话LOOKUP,可以在GRID的COLUMN设置一个按钮,然后在GRID的ONEDITBUTTONCLICK事件上处理,用一个FORM来模拟下拉框,只需要访问GRID的InplaceEdit属性就可以给你的FORM进行定位了.
      

  5.   

    谢谢诸位,lookup字段的方法我使用了,当关联的的字段没有NUll值时是可以实现的,但是一旦lookup字段中有null值,程序就报错,请问有没有哪位遇到过类似情况,如何解决?
      

  6.   

    我觉得问题可能出在ado控件上,dataset如果新建lookup自动的字段有null值,程序运行就会出错
      

  7.   

    创建两个StringList,将你要的客户ID,名称分别添加到两个StringList中,再这样指定属性 
    dbgrideh1.columns[i].PickList:=stringlist1; i为你要的指定显示的列
      

  8.   

    谢谢,这样的方法楼上已经提到,我也知道可行,但是这样可能没有lookup方便,我现在的想法是,能否事业lookup避免错误
      

  9.   

    在IDE调试会报错,但是在独立于IDE运行是不会报错的。这个是因为为NULL的时候是没有办法LOOKUP到合适的值,但是这个错误被VCL自己用TRY EXCEPT END这样的结构吃掉了。