参考:http://community.csdn.net/Expert/TopicView.asp?id=3517180500分求答案!!不够再加!!!(每次只能给100分,分期付款!)
内容如题!

解决方案 »

  1.   

    我正在研究它的例子和源代码。关注ing
      

  2.   

    不知道你说话算不算话,这段代码OK!你先去试试
    procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
      if (gdFocused in State) then
      begin
        if (DBGrid1.SelectedField.FieldName = DBComboBox1.DataField ) then
        begin
          DBComboBox1.Left := Rect.Left + DBGrid1.Left;
          DBComboBox1.Top := Rect.Top + DBGrid1.top;
          DBComboBox1.Width := Rect.Right - Rect.Left;
          DBComboBox1.Height := Rect.Bottom - Rect.Top;
          DBComboBox1.Visible := True;
        end;
      end;
    end;procedure TForm1.DBGrid1ColEnter(Sender: TObject);
    begin
    If DBGrid1.SelectedField.FieldName <> DBComboBox1.DataField then
    begin
    DBComboBox1.Visible := false;
    end;
      

  3.   

    to Jute(东方明珠) :说话当然算数啊!只要解决问题,给1000分都没有问题,而且当天兑现!你给的代码不是ehlib3.5里面DBGridEh的用法啊!要多列的!你可以看看它的DEMO1的例子,就是那个效果~
      

  4.   

    可以用INFORPOWER控件,很容易实现
      

  5.   

    to xufenglong(天天向上):DBGridEh也应该很容易实现的,好比当初DBLookUpComboBoxEh这个控件,很好用,但是不知道怎么用之前就是痛苦,有人用过的话指点一下就顺畅了~~大家顶啊!顶者有分!解决问题的保证有500分以上入帐!!!
      

  6.   

    问题在于DBGridEh示例中的query1,不知里面有什么机关?我一摸一样做了一个,下拉列表的箭头就是不出现,但用原来的确是好的。郁闷ing
      

  7.   

    问题解决:原来我的Query1是只读状态。
      

  8.   

    没人用过DBGridEh么?????????????
      

  9.   

    下面是示例的窗体文件,没有编写一行代码,加{*************************}为需要设置的地方。要注意该列应可读写,否则下拉倒三角buttom 不出现。
    1、设置数据集对应列为fkLookup,以及Lookup的相关属性
          FieldKind = fkLookup{*************************}
          FieldName = 'VName1'{*************************}
          LookupDataSet = Query2{*************************}
          LookupKeyFields = 'VendorNo'{*************************}
          LookupResultField = 'VendorName'{*************************}
          KeyFields = 'VNo'{*************************}
    2、确保该列可读写
    3、设置EhLib对应列
            AlwaysShowEditButton = True{*************************}
            DropDownShowTitles = True{*************************}
            LookupDisplayFields = 'VendorName;City;State'{*************************}
    OK下面是示例
    object Form1: TForm1
      Left = 192
      Top = 107
      Width = 783
      Height = 540
      Caption = 'Form1'
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET       
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'MS Sans Serif'
      Font.Style = []
      OldCreateOrder = False
      PixelsPerInch = 96
      TextHeight = 13
      object DBGridEh1: TDBGridEh
        Left = 16
        Top = -192
        Width = 401
        Height = 697
        DataSource = DataSource1
        FooterColor = clWindow
        FooterFont.Charset = DEFAULT_CHARSET
        FooterFont.Color = clWindowText
        FooterFont.Height = -11
        FooterFont.Name = 'MS Sans Serif'
        FooterFont.Style = []
        TabOrder = 0
        TitleFont.Charset = DEFAULT_CHARSET
        TitleFont.Color = clWindowText
        TitleFont.Height = -11
        TitleFont.Name = 'MS Sans Serif'
        TitleFont.Style = []
        Columns = <
          item
            EditButtons = <>
            FieldName = 'VNo'
            Footers = <>
          end
          item
            AlwaysShowEditButton = True{*************************}
            DropDownShowTitles = True{*************************}
            DropDownWidth = -1
            EditButtons = <>
            FieldName = 'VName1'
            Footers = <>
            LookupDisplayFields = 'VendorName;City;State'{*************************}
          end
          item
            EditButtons = <>
            FieldName = 'VPreferred'
            Footers = <>
          end
          item
            EditButtons = <>
            FieldName = 'PNo'
            Footers = <>
          end
          item
            EditButtons = <>
            FieldName = 'PDescription'
            Footers = <>
          end
          item
            EditButtons = <>
            FieldName = 'PCost'
            Footers = <>
          end
          item
            EditButtons = <>
            FieldName = 'IQty'
            Footers = <>
          end>
      end
      object Query1: TQuery
        Active = True
        CachedUpdates = True{*************************}
        DatabaseName = 'DBDEMOS'
        RequestLive = True
        SQL.Strings = (
          'SELECT'
          '       Vendors.VendorNo VNo,'
          '       Vendors.VendorName VName,'
          '       Vendors.Preferred VPreferred,'
          '       Parts.PartNo PNo,'
          '       Parts.Description PDescription,'
          '       Parts.Cost PCost,'
          '       Items.Qty IQty'
          ''
          'FROM Vendors, Parts, Items'
          'WHERE Vendors.VendorNo = Parts.VendorNo AND'
          '       Parts.PartNo = Items.PartNo'
          'ORDER BY Items.Qty, Parts.Cost')
        UpdateObject = UpdateSQL1
        Left = 112
        Top = 40
        object Query1VNo: TFloatField
          CustomConstraint = '(VNo > 1000) and (VNo < 9999)'
          ConstraintErrorMessage = 'Vendor No has to be between 1000 and 9999'
          FieldName = 'VNo'
          Origin = 'DBDEMOS."Vendors.DB".VendorNo'
          DisplayFormat = 'VN 0000'
          MaxValue = 9999.000000000000000000
          MinValue = 1000.000000000000000000
        end
        object Query1VName: TStringField
          FieldName = 'VName'
          LookupDataSet = Query2
          Origin = 'DBDEMOS."Vendors.DB".VendorName'
          Size = 30
        end
        object Query1VPreferred: TBooleanField
          FieldName = 'VPreferred'
          Origin = 'DBDEMOS."Vendors.DB".Preferred'
        end
        object Query1PNo: TFloatField
          Alignment = taLeftJustify
          FieldName = 'PNo'
          Origin = 'DBDEMOS."parts.DB".PartNo'
          DisplayFormat = 'PN-00000'
        end
        object Query1PDescription: TStringField
          FieldName = 'PDescription'
          Origin = 'DBDEMOS."parts.DB".Description'
          Size = 30
        end
        object Query1PCost: TCurrencyField
          FieldName = 'PCost'
          Origin = 'DBDEMOS."parts.DB".Cost'
        end
        object Query1IQty: TIntegerField
          FieldName = 'IQty'
          Origin = 'DBDEMOS."items.DB".Qty'
        end
        object Query1VName1: TStringField
          FieldKind = fkLookup{*************************}
          FieldName = 'VName1'{*************************}
          LookupDataSet = Query2{*************************}
          LookupKeyFields = 'VendorNo'{*************************}
          LookupResultField = 'VendorName'{*************************}
          KeyFields = 'VNo'{*************************}
          Lookup = True
        end
      end
      object Query2: TQuery
        Active = True
        DatabaseName = 'DBDEMOS'
        SQL.Strings = (
          'select * from Vendors'
          'order by VendorName')
        Left = 120
        Top = 128
        object Query2VendorNo: TFloatField
          CustomConstraint = '(VendorNo > 1000) and (VendorNo < 9999)'
          ConstraintErrorMessage = 'Vendor No has to be between 1000 and 9999'
          FieldName = 'VendorNo'
          Origin = 'DBDEMOS."Vendors.DB".VendorNo'
          DisplayFormat = 'VN 0000'
          MaxValue = 9999.000000000000000000
          MinValue = 1000.000000000000000000
        end
        object Query2VendorName: TStringField
          FieldName = 'VendorName'
          Origin = 'DBDEMOS."Vendors.DB".VendorName'
          Size = 30
        end
        object Query2Address1: TStringField
          FieldName = 'Address1'
          Origin = 'DBDEMOS."Vendors.DB".Address1'
          Size = 30
        end
        object Query2Address2: TStringField
          FieldName = 'Address2'
          Origin = 'DBDEMOS."Vendors.DB".Address2'
          Size = 30
        end
        object Query2City: TStringField
          FieldName = 'City'
          Origin = 'DBDEMOS."Vendors.DB".City'
        end
        object Query2State: TStringField
          FieldName = 'State'
          Origin = 'DBDEMOS."Vendors.DB".State'
        end
        object Query2Zip: TStringField
          FieldName = 'Zip'
          Origin = 'DBDEMOS."Vendors.DB".Zip'
          Size = 10
        end
        object Query2Country: TStringField
          FieldName = 'Country'
          Origin = 'DBDEMOS."Vendors.DB".Country'
          Size = 15
        end
        object Query2Phone: TStringField
          FieldName = 'Phone'
          Origin = 'DBDEMOS."Vendors.DB".Phone'
          Size = 15
        end
        object Query2FAX: TStringField
          FieldName = 'FAX'
          Origin = 'DBDEMOS."Vendors.DB".FAX'
          Size = 15
        end
        object Query2Preferred: TBooleanField
          FieldName = 'Preferred'
          Origin = 'DBDEMOS."Vendors.DB".Preferred'
        end
      end
      object DataSource1: TDataSource
        DataSet = Query1
        Left = 200
        Top = 40
      end
      object DataSource2: TDataSource
        DataSet = Query2
        Left = 208
        Top = 136
      end
      object UpdateSQL1: TUpdateSQL
        Left = 240
        Top = 136
      end
    end
      

  10.   

    to  Jumpi(Delphiing) :谢谢兄弟,我也是刚弄明白~~:) 不过分少不了你的。另外帮忙看个问题,这个多列的设置我已经做出来了,和你提示的一样,但是,我显示的LookUp表格的内容是
    -------------
    仓库编码   仓库名称    描述
    1          1#仓库    汽车站后
    2          2#仓库    迎宾路旁我的LookupKeyFields是仓库编码,LookupResultField是仓库名称,但是怎么选择后,还是显示仓库编码而不是仓库名称呢?我找不到问题所在。用DBLookUpComboBoxEh这样设置的话有个ListFieldIndex属性的,可以设置为0~xxx,分别对应不同的字段名。而这个地方没有这个属性~~帮忙看看怎么回事,大奖近在眼前了啊~~
      

  11.   

    无需代码,只要在DataSet里设置一个Lookup字段即可。
      

  12.   

    to southdream(南国幽梦):我知道无需代码,我也已经设置好了,看看我最后那个帖子!我现在的问题在于这个LookupResultField的效果出不来。
      

  13.   

    应该没有这样的问题呀,在DataSet中设置都很正常的。我在TClientDataSet中用过,也很好的。
      

  14.   

    to Jumpi(Delphiing):发个例子到我信箱,[email protected],解决那个LookupResultField的问题!立刻结分!
      

  15.   

    up 也有分!!!!我也up !!! 大家快帮帮忙啊~
      

  16.   

    DBGridEh是个很优秀的控件,他的功能非常强大,而且还是带源码的,通过分析ehlib里的代码,我学到了很多的东西,但是——我发现——这个广为人知的控件,竟然问个基本问题都没人能帮忙解答清楚,我太失望了!!!我决定——解决问题后,决不和其他人分享我的心得~!!!
      

  17.   

    本人有一个此控件的实例。联系我msg:[email protected]
      

  18.   

    有朋友给我E-Mail了一个DEMO解决问题了,但是我竟然仿做不出来,强烈郁闷ing ........
      

  19.   

    设置好查找字段后
    然后在LookupDisplayFields 属性了用';'分隔,加入需要的字段就可以了吧
    我都是这样用的
      

  20.   

    to anbangs(菜鸟邦) :这个早知道了~呵呵
      

  21.   

    大家可以到http://qinmin.com/upload/demo.rar下载例子,解压后,other.rar是别人给我的,已经实现我需要的功能了;mydemo.rar是我自己做的,我看不出什么原因导致我得不到我想要的效果,大家帮忙看看~~
      

  22.   

    我顶!(CSDN老是说我提前太频繁了,我晕~我才刚吃饱早餐上网呢~)
      

  23.   

    你比较一下我的例子和你的例子,你的数据集无法编辑,则便是关键所在!
    BDE中的TQuery默认是只读的。
    你可以用其他数据集试试,如TClientDataSet。我用DBExpress做了一个例子,也是由于该列数据无法编辑而没有出现下拉的倒三角!
      

  24.   

    那你的也是BDE的TQuery,怎么你的就不是只读的么?哪里设置了?我怎么没有看到~~
      

  25.   

    Active = True
        CachedUpdates = True{*************************}
        DatabaseName = 'DBDEMOS'
        RequestLive = True{*************************}
        SQL.Strings = (
          'SELECT'
          '       Vendors.VendorNo VNo,'
          '       Vendors.VendorName VName,'
          '       Vendors.Preferred VPreferred,'
          '       Parts.PartNo PNo,'
          '       Parts.Description PDescription,'
          '       Parts.Cost PCost,'
          '       Items.Qty IQty'
          ''
          'FROM Vendors, Parts, Items'
          'WHERE Vendors.VendorNo = Parts.VendorNo AND'
          '       Parts.PartNo = Items.PartNo'
          'ORDER BY Items.Qty, Parts.Cost')
        UpdateObject = UpdateSQL1{*************************}
      

  26.   

    用devexpress grid不用你写任何代码就能解决你说得问题。
      

  27.   

    哈哈~解决问题啦~~至于怎么解决的,我不直接说明白,想知道怎么回事,大家查看UpdateSQL的Delphi帮助就明白了。派分!!!鉴于Jumpi(Delphiing) 指导有方,另外派分,这里的100分就留给帮我顶帮我提示的朋友们了。