本人是三层结构,client 端用的是一个 Clientdataset1 连接 表1。
然后动态创建一个 clientdataset2 连接 表2。
表1:
ID Prod State
1    bc   y
5    ab   n
3    cc   s
......
表2:
Status comments
y        pass
n        failed
s        sent
w        wait
现在用一个 dbgrideh1 + datasource1 + clientdataset1 连接表1并显示出来,同时将表2的status对应comments的值在dbgrideh1显示出来,同时可以下拉列表选择表2的status.(但要求显示出comments)。我找遍论坛,也没有一个可以完整的做出来的,
首先是因为clientdataset1平常是不连接数据库的,用到的时候才给sql执行,动态创建的clientdataset2 也是一样,那怎么设置所谓的“dataset 的 lookup 字段”啊?那是什么东西啊?
然后是 dbgrideh1.columns[3].lookupdisplayfields := 'status';
dbgrideh1.columns[3].alwaysshoweditbutton := True;
设置以后没有任何动静。
另外,我设置 dbgrideh1.stfilter.local := true; dbgrideh1.stfilter.visible := true; 
dbgrideh1.column[2].stfilter.listsource := clientdataset1.datasource; 
dbgrideh1.column[2].stfilter.datafield := 'state';
dbgrideh1.column[2].stfilter.keyfield := 'state';
dbgrideh1.column[2].stfilter.listfield := 'state';filter的下拉倒是出来了,可是列表里有很多重复的数据,而且鼠标移动到数据网格就出错。根本没办法选择,起不了filter的作用。据说要设置 clientdataset1.filter,又怎么设置啊?
高手帮忙啊,谢谢,分不够再加。

解决方案 »

  1.   

    可以在设计时先把sql写到CLIENTDATASET的COMMANDTEXT中进行连接,设好state LOOKUP字段就行了
      

  2.   

    『另外,我设置 dbgrideh1.stfilter.local := true; dbgrideh1.stfilter.visible := true; 
    dbgrideh1.column[2].stfilter.listsource := clientdataset1.datasource; 
    dbgrideh1.column[2].stfilter.datafield := 'state';
    dbgrideh1.column[2].stfilter.keyfield := 'state';
    dbgrideh1.column[2].stfilter.listfield := 'state';filter的下拉倒是出来了,可是列表里有很多重复的数据,而且鼠标移动到数据网格就出错。根本没办法选择,起不了filter的作用。据说要设置 clientdataset1.filter,又怎么设置啊?
    』这儿肯定是错的,当移动下拉列表时,cds1的指针移动,而实际无法移动,应改为cds1。
      

  3.   

    to Jumpi(Delphi进行时) ,     cdsl 是什么啊?不懂,给点 code 参考参考啊?搞定以后 50 分你的。谢谢。
      

  4.   

    with one_item_sql do
      begin
         close;
         sql.clear;
         sql.add('select distinct right(itemcode,4) as temp_itemcode from chargeitem');
         sql.add('where orgname=:orgname');
         prepare;
         open;
         one_item_sql.first;
         while not one_item_sql.eof do
         begin
            DBGrid1.Columns[0].PickList.add(one_item_sql.fieldbyname('temp_itemcode').asstring);
            one_item_sql.next;
         end;
      end;
    不知道是不是你想要的
      

  5.   

    column[i].picklist加入要显示的值
    column[i].keylist加入要保存的值
    这样可以吗
      

  6.   

    打字打错了,应该把clientdataset1改为clientdataset2
    dbgrideh1.stfilter.local := true; dbgrideh1.stfilter.visible := true; 
    dbgrideh1.column[2].stfilter.listsource := clientdataset2.datasource; 
    dbgrideh1.column[2].stfilter.datafield := 'state';
    dbgrideh1.column[2].stfilter.keyfield := 'status';
    dbgrideh1.column[2].stfilter.listfield := 'comments';至于第一个问题.....
      

  7.   

    to deluxtx(警告!CSDN--熊出没的地方), qizhanfeng(glacier)    不要用到 picklist 和 keylist ,用 lookup 直接做,可行不可行?因为 picklist 和 keylist 是静态的吧。另外,deluxtx,你的 one_item_sql 是指 clientdataset2 吗?
      

  8.   

    to Jumpi(Delphi进行时),      你搞错了,第一个问题是在 state 字段的每一个记录里面下拉列表,第二个 filter 的问题,只是在 title 下面的 filter 下拉列表里对 clientdataset1 做 filter,需要连接 clientdataset2 吗?      而且,我那样试过了,甚至连下拉 filter 列表那个按钮都没出现。但是 clientdataset2 确定有数据,因为我曾用另一个 dbgrid 显示出来,确定 status 数据 query 出来了。      这两个问题不一样的吧?
      

  9.   

    各位大虾,我其实就是想做成 DBGridEh->Demo1->Grid1->VendorName2 那一列的那个效果。但是因为第一,我看不太懂那个 code ,也不知道 trace 哪个下拉的事件。第二,因为 ClientDataSet 不是固定的连接某个表,不能对某个 column 固定下来设置,所以想改到 code 里面动态控制。你们觉得怎样?
      

  10.   

    TO   hoho5999(hoho) 
    one_item_sql 是指 QUERY 但用倒  clientdataset 也事没问题的