各位高手,小弟日前遇到一问题,我在一程序中新建了一窗口,用USES引用了其它窗口的一个TADOConnect控件,然后添加了一个下拉列表框,和一个DBGrid控件,在DBGRID中有一列必须要用到这个列表框,我想请问一下各位高手,怎样才能把这个列表框的用在dbgrid控件中?[注意:这个列表框中能焦点在该列上才显示,大小位置都等于该列的大小位置,]

解决方案 »

  1.   

    一个在DBGRID中嵌入COMBOBOX控件的例子:procedure Tf_hksz.DBGDrawColumnCell(Sender: TObject; const Rect: TRect;
      DataCol: Integer; Column: TColumn; State: TGridDrawState);
    begin
          begin
             q_rq.Left:=Rect.Left + dbg.Left+3;//q_rq 为TCOMBOBOX
             q_rq.Top:=Rect.Top + dbg.top+3;
             q_rq.Width:=Rect.Right - Rect.Left;
             q_rq.Height:=Rect.Bottom - Rect.Top;
             q_rq.Visible:=true;
          end;procedure Tf_hksz.DBGColExit(Sender: TObject);
    begin
       q_rq.Visible:=false;
    end;
      

  2.   

    cg1120(代码最优化-§新年祝福你,好运伴着你§)的方法可以的.
    你先把一个下拉列表在初始化时给隐藏了.就是说把dbcombobox.visible:=false;
    procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
      Field: TField; State: TGridDrawState);
    begin
      if (gdFocused in State) then
      begin
        if (Field.FieldName = DBComboBox1.DataField) then
        begin
          DBComboBox1.Left := Rect.Left + DBGrid1.Left;
          DBComboBox1.Top := Rect.Top + DBGrid1.top;
          DBComboBox1.Width := Rect.Right - Rect.Left;
          DBComboBox1.Visible := True;
        end;
      end;
    end;
      

  3.   

    上面那位仁况的方法我也试过了,可是却还是不行,我是从SQL SERVER数据库中的几张表中调的数据,不知怎么的却不行!请高手指教啊,小弟在此万分感谢!
      

  4.   

    建立两个TTABLE控件,一个指向需要显示的数据(A),另一个指向下拉列表指向的数据(B),用ADD COLUMN将A中的列全部加上,然后再ADD,NEW,将其选定为LOOKUP 类型,名称自定,在下列的选项中选择数据源B,在LOOKUP 列中将B中的代码选上,在RESULT列中将名称列选上。
    新加一窗口,建立一DBGRID,DATASOURCE指向A,试一试是否有了下拉列表?
    祝你成功!