初学者的DBGrid问题

qucon 2003-09-24 08:35:51
我用DBGrid为什么动态连上数据库后没有数据,必须用鼠标点一次出现一个数据,还有我在DBGrid立面动态建立了下拉列表框,为什么总是出现一行数据
...全文
43 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
superguoguo 2003-09-24
  • 打赏
  • 举报
回复
up
mxk19791116 2003-09-24
  • 打赏
  • 举报
回复
1.
//在DBGrid的colEnter事件写下如下代码,即可实现下拉列表
with DBGri1.selectedfield do
if (FieldName='field1') then //field1下拉显示FieldMc值
with adoquery1 do
begin
close;
sql.Clear ;
sql.Add('select distinct fieldmc from table1 ');//信息来源表
open;
if recordcount>0 then
begin
first;
with DBgrid1 do
for j:=1 to FieldCount do
if columns[j].FieldName ='fieldmc' then
begin
columns[j].PickList.Clear;
for i:=1 to recordcount do
begin
columns[j].PickList.Add(fieldbyname('fieldmc').value);
next;
end;
break;
end;
end;
close;
end;




添加Lookup字段也可以实现同样的效果,
不过Lookup是针对query(Adoquery)实现的
鼠标双击query(adoquery),鼠标单击右键,
New Field设置Field type=Lookup
然后设置相关属性即可!


直接用ADOquery与DBgrid关联,在query中新建一字段(假设名为X),设为lookup,并与你的表相联,OK了,在DBGrid中的X字段中就自动是下拉列表了!!


2.

用PICKLIST:
dbgrid1.Columns[第几个字段].PickList.append(ADOTABLE.FIELDBYNAME('字段名').ASSTRIING)


用PICKLIST:
dbgrid1.Columns[第几个字段].PickList.append(ADOTABLE.FIELDBYNAME('字段名').ASSTRIING)


用PICKLIST:
dbgrid1.Columns[第几个字段].PickList.append(ADOTABLE.FIELDBYNAME('字段名').ASSTRIING)




设置DBGrid1.Columns[I].PickList属性,就可以把DBGrid1的第I列变成一个下拉框,如果要求第I列的不同行的下拉框内容不同,那就把跟DBGrid1关联的数据集设置一个单键索引,在OnCellClick事件中读取当前记录数据,来确定显示什么下拉框
delphipan 2003-09-24
  • 打赏
  • 举报
回复
UP
qucon 2003-09-24
  • 打赏
  • 举报
回复
我现在是把动态设置下拉列表框写在了ONColEnter事件里面了,但是老是出现有重复的数据,我只要点击别的下拉列表框,就会多出现一行,为什么?我现在想用判断来去掉,但怎么得到我选择得列名?
qucon 2003-09-24
  • 打赏
  • 举报
回复
Procedure setpicklist(ADOQueryName:TADOQuery;DBGridCode:TDBGrid;str:string;fieldname:string;i:integer);
begin
ADOQueryName.SQL.Clear ;
ADOQueryName.SQL.Add(str);
ADOQueryName.Open;
ADOQueryname.First;
DBGridCode.Columns[i].PickList.append(ADOqueryname.fieldbyname(fieldname).AsString);
ADOqueryname.Next;
end;
///////////////////////
procedure TFormCode.DBGridCodeColEnter(Sender: TObject);
var
str:string;
begin
if TreeViewCode.Selected.Text = '产品编码' then
begin
if DBGridCode.c = 'prodname' then
begin
str:='select * from P_ProdName';
SetPicklist(ADOQueryName,DBGridCode,Str,'prodname',1);
end;
Str:='select * from P_ProdSpec';
SetPicklist(ADOQueryName,DBGridCode,Str,'spec',2);
Str:='select * from P_ProdColor';
SetPicklist(ADOQueryName,DBGridCode,Str,'prodcolor',3);
Str:='select * from P_ProdType';
SetPicklist(ADOQueryName,DBGridCode,Str,'prodtype',4);
end;
end;
FSU 2003-09-24
  • 打赏
  • 举报
回复
table或Qurery刷新一次!
FrameSniper 2003-09-24
  • 打赏
  • 举报
回复
代码?
qucon 2003-09-24
  • 打赏
  • 举报
回复
我现在是把动态设置下拉列表框写在了ONColEnter事件里面了,但是老是出现有重复的数据,我只要点击别的下拉列表框,就会多出现一行,为什么?我现在想用判断来去掉,但怎么得到我选择得列名?
qucon 2003-09-24
  • 打赏
  • 举报
回复
我的下拉列表框只有一行数据,是否是因为我没有定义下拉的行数,如果定义,改如何动态定义
雨后阳光2000 2003-09-24
  • 打赏
  • 举报
回复
你在设计的时候,让相连的table和其他数据集的active等于true,看看DBGrid有没有全部显示数据。
yanlls 2003-09-24
  • 打赏
  • 举报
回复
defaultdrawing属性设置如何?
onebody 2003-09-24
  • 打赏
  • 举报
回复
up
47522341 2003-09-24
  • 打赏
  • 举报
回复
用refresh语句对数据表刷新一次试试,

5,939

社区成员

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

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