起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 265|回复: 7

【结贴】LayoutChange;的用法。

[复制链接]
发表于 2009-12-2 14:27:24 | 显示全部楼层 |阅读模式
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的值不要变。
回复

使用道具 举报

 楼主| 发表于 2009-12-2 15:13:28 | 显示全部楼层
自己顶一下吧
回复 支持 反对

使用道具 举报

发表于 2009-12-2 15:24:08 | 显示全部楼层
啥意思,你重新定义查找数据集的相关属性后,关键字 的 显示名称 和 原先不一样了吧。
不变,那你重新定义查找属性的意义在哪里呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-2 15:45:06 | 显示全部楼层
我可能没说清楚,我重新定义查找属性值的是DataSetKHCSPZ数据集的bckhmc字段,
而dataEdit1所关联的是DataSetKHCSPZ数据集的KHKSSJ字段。
查找属性的动态设置是没问题的。
问题出现在,TSQLDataSet(DataSetKHCSPZ.Dataset).LayoutChange;这句话一执行,我的dataEdit1的值就自动变了。不知道为什么?
回复 支持 反对

使用道具 举报

发表于 2009-12-2 15:55:07 | 显示全部楼层
这两个字段有关联吧,例如自动填充属性等,你检查一下吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-2 16:13:13 | 显示全部楼层
好了,知道怎么回事了。
我的dataEdit1.text是在另一个按钮事件中赋值的,赋值时,把DataEdit1.Text:=SysUtils.DateToStr(first_day);改为DataSetKHCSPZ.DataSet.FieldByName('KHKSSJ').AsDateTime:=first_day;
DataEdit1的值就不会自动变了。
这么改是行了,但是我还太清楚为什么要这么改。我只是感觉是这儿有问题。
回复 支持 反对

使用道具 举报

发表于 2009-12-2 17:03:13 | 显示全部楼层
呵呵,这就要看你具体的设置了,肯定是哪里触发了,给该字段重新赋值了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-2 18:44:29 | 显示全部楼层
呵呵,ok,结贴吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 20:26 , Processed in 0.037524 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表