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;
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;
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;
//在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事件中读取当前记录数据,来确定显示什么下拉框