如题所示 本人想做个简单的录入 但是其中有几个字段是从其他表里取出数据 用类似下拉框来选择 来填上的,现在本人不知道如何在TDBGRID控件实现下拉框的功能(反正想在TDBGrid中出现下拉框)?
想用TDBgrid+TTable+Datasource 完成,Ttable的属性TableName 为录入记录存放的地方,其中TDBGrid里有几个字段从别的表里取,用下拉框显示,由用户选择.现在我已经知道怎么在tdbgrid中出现下拉框了 只需在tdbgrid中添加字段后 利用picklist属性则可。
现在又又问题:下拉框的值(若此对应字段为水果) 比如 苹果,梨,香蕉...等等,也就是说picklist里的值应该是动态的 不应该写死在picklist属性 而是应该通过比如Tquery控件从相关的表把水果种类查出来后 再付给picklist的。问题是我用Tquery控件查出来后,无法付给picklist属性,因为picklist属性为Tstring型,而 Tquery查出来的字段值是String型,不匹配。哎呀!怎么弄才好呢?请大家指点迷津啊
想用TDBgrid+TTable+Datasource 完成,Ttable的属性TableName 为录入记录存放的地方,其中TDBGrid里有几个字段从别的表里取,用下拉框显示,由用户选择.现在我已经知道怎么在tdbgrid中出现下拉框了 只需在tdbgrid中添加字段后 利用picklist属性则可。
现在又又问题:下拉框的值(若此对应字段为水果) 比如 苹果,梨,香蕉...等等,也就是说picklist里的值应该是动态的 不应该写死在picklist属性 而是应该通过比如Tquery控件从相关的表把水果种类查出来后 再付给picklist的。问题是我用Tquery控件查出来后,无法付给picklist属性,因为picklist属性为Tstring型,而 Tquery查出来的字段值是String型,不匹配。哎呀!怎么弄才好呢?请大家指点迷津啊
begin
abc:='苹果';//这个是你自己的东西
dbgrid1.columns[4].picklist.add(abc);
end;
dbgrid的功能自已没研究好居然去写书,还误导读者,实在是不应该啊
procedure SetGridCbx(sSQL: string; cbx: TColumnEH; conn: TADOConnection;
bAllowNull: Boolean=False; sNullValue: string=''; sNullItem:string='');
var
Tmp: TADOQuery;
begin
Tmp := TADOQuery.Create(Nil);
try
with Tmp do
begin
Connection := conn;
Close;
SQL.Clear;
SQL.Add(sSQL);
Open;
First;
if bAllowNull then
begin
cbx.PickList.Add(sNullItem);
cbx.KeyList.Add(sNullValue);
end;
while not Eof do
begin
cbx.PickList.Add(Fields[0].AsString+'|'+Fields[1].AsString);
cbx.KeyList.Add(Fields[0].AsString);
Next;
end;
end;
finally
Tmp.Close;
Tmp.Free;
end;
end;
用到的时候
SetGridCbx('select WJXX_KJBH,WJXX_KJMC from WJXX order by WJXX_KJBH ',DBGridEh.FieldColumns['KJZMX_KJBH'],Self.DBConnect,True);
就可以从数据表中获取值 给 picklist
dbgrid1.coloumn[0].picklist.cliear;
query1.first;
repeat
dbgrid1.coloumn[0].picklist.add(query1.fieldbyname('水果').asstring);
query1.next;
until query1.eof;
end;