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
然后设置相关属性即可!
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;