|
procedure TMainForm.DataEdit27Enter(Sender: TObject);
var
lBizField:TBizField;
str:string;
i:integer;
begin
Query1.Close;
Query1.ConnectionString:='DATABASEURL=Biz:\KHXT\KHSJK.Database';
Query1.CommandText:= 'select distinct bckhmc from ZGPJB where KHKSRQ=to_date('''+dataedit1.Text+''', ''yyyy-mm-dd'') and KHJSRQ=to_date('''+Dataedit4.Text+''', ''yyyy-mm-dd'') and KHLB='''+combobox1.Text+''' and khryssbm='''+dept+'''';
Query1.Execute;
Query1.Open;
//以下代码为论坛上抄的抄的,动态设置数据字段的枚举查找值
lBizField:=TSQLDataset(DataSetKHCSPZ.DataSet).FindBizField('bckhmc');
lBizField.DataType:=tdatatype.dtString;
lBizField.EditStyleID :='String' ;
lBizField.LookupDef.Kind := TLookupKind.lkEnumValues ;
str:= '<?xml version="1.0" standalone="yes"?> <DATAPACKET Version="2.0' +
'"><METADATA><FIELDS><FIELD fieldname="查找值" attrname="xF0" fieldt' +
'ype="string" WIDTH="255"/><FIELD fieldname="关键值" attrname="xF1" ' +
'fieldtype="string" WIDTH="255"/></FIELDS>< ARAMS/></METADATA><RO' +
'WDATA>';
if query1.RecordCount>0 then
Begin
for i:=0 to query1.RecordCount-1 do
begin
str:=str+'<ROW xF0="'+Query1.FieldByName('bckhmc').AsString+'" xF1="'+Query1.FieldByName('bckhmc').AsString+'"/>';
query1.Next;
end;
end;
str:=str+'</ROWDATA></DATAPACKET>';
lBizField.LookupDef.Values.Text := (str);
lBizField.LookupDef.DisplayField := '查找值' ;
lBizField.LookupDef.KeyField := '关键值' ;
lBizField.LookupDef.ViewID := 'GridView' ;
lBizField.LookupDef.ViewProperties.text := (
'object TGridViewDesigner'+
' VisibleColumns.Strings = (#26597#25214#20540)'+
' Options = [goShowQuickCodeField]'+
'end');
lBizField.LookupDef.Options := [TLookupOption.loDropDownButton, TLookupOption.loDropDownList] ;
TSQLDataSet(DataSetKHCSPZ.Dataset).LayoutChange;
end;
有这么一段代码。设置字段动态查找值的方法来自论坛。
单步调试发现:TSQLDataSet(DataSetKHCSPZ.Dataset).LayoutChange;这句话一执行,dataEdit1的值就自动变了,不知道为什么? 希望的是DataEdit1的值不要变。 |
|