表结构为:Organ( ID,   Code,     Name)
内容为             1  10300100   单位A
                  2  10300101   A的下属单位1
                 3  10300102   A的下属单位2
                   ......
                  7  10300200   单位B
                 8  10300201   B的下属单位1
                 9  10300202   B的下属单位2
                    ......
其中,Code最后两位不为0的是下属单位,其父单位的Code为该单位Code前6位后加两个0设置如下:adqSearch.SQL.Text := 'SELECT iif((Code MOD 100)=0,NULL,INT(Code/100)*100) AS iParent, * FROM Organ';
adqParent.SQL.Text := 'SELECT Code,Name FROM Organ WHERE (Code MOD 100)=0';cxDBLookupComboBox1.DataBinding.DataSource := adqSearch;
cxDBLookupComboBox1.DataBinding.DataField := iParent;
cxDBLookupComboBox1.Properties.ListSource := adqParent;
cxDBLookupComboBox1.Properties.KeyFieldNames := 'Code';
cxDBLookupComboBox1.Properties.ListFieldNames := 'Code;Name';运行之,显示和下拉列表都正常,但选择后不能改变iParent的值,例如:
  当前记录ID=8时,不管怎么选,结果总是10300200
  当前记录ID=7时,不管怎么选,结果总是空请问怎么解决之?
ps. 不能直接在表中增加一个'iParent'字段

解决方案 »

  1.   

    cxDBLookupComboBox1.DataBinding.DataField := iParent; 
    不是一个实制的字段啊!
      

  2.   

    呵呵,知道iParent不是一个实际字段,但
    “请问怎么解决之? 
    ps. 不能直接在表中增加一个'iParent'字段 ”
      

  3.   

    这句cxDBLookupComboBox1.DataBinding.DataSource := adqSearch不用设置了,因为你的cxGrid中
    cxGrid1DBTableView1已经关联数据库了。
    cxDBLookupComboBox1.DataBinding.DataField := iParent; 去掉这个试一下。所有的这些都可以在设计时都设置好,不需要动态设置,你试一下。