一个关于DBGrid控件中使用下拉列表框的问题!

TangDY 2003-02-04 05:39:16
各位高手,小弟日前遇到一问题,我在一程序中新建了一窗口,用USES引用了其它窗口的一个TADOConnect控件,然后添加了一个下拉列表框,和一个DBGrid控件,在DBGRID中有一列必须要用到这个列表框,我想请问一下各位高手,怎样才能把这个列表框的用在dbgrid控件中?[注意:这个列表框中能焦点在该列上才显示,大小位置都等于该列的大小位置,]
...全文
36 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqdshsy 2003-02-05
  • 打赏
  • 举报
回复
建立两个TTABLE控件,一个指向需要显示的数据(A),另一个指向下拉列表指向的数据(B),用ADD COLUMN将A中的列全部加上,然后再ADD,NEW,将其选定为LOOKUP 类型,名称自定,在下列的选项中选择数据源B,在LOOKUP 列中将B中的代码选上,在RESULT列中将名称列选上。
新加一窗口,建立一DBGRID,DATASOURCE指向A,试一试是否有了下拉列表?
祝你成功!
TangDY 2003-02-05
  • 打赏
  • 举报
回复
上面那位仁况的方法我也试过了,可是却还是不行,我是从SQL SERVER数据库中的几张表中调的数据,不知怎么的却不行!请高手指教啊,小弟在此万分感谢!
haerbin982 2003-02-04
  • 打赏
  • 举报
回复
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;
TangDY 2003-02-04
  • 打赏
  • 举报
回复
其实我也照上面那位高手那样试过了,可是却还是不行,但是却可以根据列的不同隐藏那个下拉列表框,请各位高手再帮帮忙,小弟在线等待~!!!谢谢了!
Billy_Chen28 2003-02-04
  • 打赏
  • 举报
回复
一个在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;

5,387

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧