起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 533|回复: 4

动态过滤

[复制链接]
发表于 2010-10-27 09:28:46 | 显示全部楼层 |阅读模式
问题一:
我对数据集的查找字段设置了动态过滤,选中了动态过滤和返回被过滤的值

但是没有起作用

当我在第二条上使用了过滤时候  第一条的就找不到了   好像第一条的不在查找范围内
查不到  

但是当第三条的时候  如果输入相同的记录,就又出来了  

问题二:
我不管在下拉的选项中选择那一项,选择以后过滤出来的都是同一个值,并不是我想选的值
如图所示:

ccc.jpg

8.9 KB, 下载次数: 214

回复

使用道具 举报

 楼主| 发表于 2010-10-27 09:32:41 | 显示全部楼层
上图所示的EP200运输带
不管我在ysd对应的下拉选项中选择哪一个
他过滤出来的都是这个
如果所示下拉选项:

22.jpg

15.44 KB, 下载次数: 216

回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-10-27 09:44:14 | 显示全部楼层
我这里设置动态过滤的代码如下:
    with TSQLDataSet(DataSetWZGLCS).BizFieldByName('wzmc') do
    begin
      LookupDef.Kind :=TLookUpKind.lkDataValues;                               //定义查找类型
      LookupDef.DataBase.URL := 'Biz:\ZKJTWZGLXT\WZGLSJK.DATABASE';            // 定义数据库
      LookupDef.SQL.Text:= 'select wzmc,wzjx from wzxxb where wzmc is not null and wzjx='''+wzjx+'''';  //查找数据表
      LookupDef.DisplayField := 'wzmc';         //显示字段
      LookupDef.KeyField := 'wzjx';                 //关键字
      LookupDef.QuickCodeField := 'wzjx';  //快速编码字段
      LookupDef.ViewID := 'GridView';    //定义显示视图(如:标准、编码树)
      LookupDef.Filtered := True;
      LookupDef.ViewProperties.Clear;
      LookupDef.ViewProperties.Add(         //视图各类属性
        'object _1: TGridViewDesigner'+
        '  VisibleColumns.Strings = ('+
        '    '#39'wzmc'#39')'+
        '  Options = [goShowQuickCodeField]'+
        'end');
      LookupDef.Options := [TLookupOption.loReturnFiltered]; //表现(如:下拉,自动下拉,显示下拉按钮)
    end;
    DataSetWZGLCS.LayoutChange;
回复 支持 反对

使用道具 举报

发表于 2010-10-27 10:03:20 | 显示全部楼层
代码参考

if (Field <> nil) and (Field.FieldName = 'ZD1') then
with DataSetBZSJJ1.BizFieldByName('ZD3') do
  begin
    LookupDef.Kind :=TLookUpKind.lkDataValues;                               //定义查找类型
    LookupDef.DataBase.URL := 'Biz:SYSTEMSYSTEM.DATABASE';            // 定义数据库
    LookupDef.SQL.Text:= 'SELECT FID, FDISPLAYNAME FROM TPERSON';  //查找数据表
    LookupDef.DisplayField := 'FDISPLAYNAME';         //显示字段
    LookupDef.KeyField := 'FID';                 //关键字
    LookupDef.QuickCodeField := 'FID';  //快速编码字段
    LookupDef.Filter.Add('(FID = DataSet.ZD1)');
    LookupDef.Filtered := True;
    LookupDef.ViewID := 'GridView';       //定义显示视图(如:标准、编码树)

    LookupDef.ViewProperties.Add(         //视图各类属性
      'object _1: TGridViewDesigner'+
      '  VisibleColumns.Strings = ('+
      '    '#39'FDISPLAYNAME'#39')'+
      '  Options = []'+
      'end');
    LookupDef.Options := [TLookupOption.loReturnFiltered,TLookupOption.loDropDownButton]; //表现(如:下拉,自动下拉,显示下拉按钮)
  end;

附件效果

无标题.gif

1.97 KB, 下载次数: 206

回复 支持 反对

使用道具 举报

发表于 2010-10-27 14:40:46 | 显示全部楼层
知道原因了,是因为你在给 LookupDef.SQL.Text 赋值的时候加载了 wzjx 这个字段的过滤,
前面一直在说的选中“返回被过滤的值”,是指在过滤页面设置了动态过滤,并选中 使用动态查找范围  这个选项后,当前下拉里面没有的值,但LookupDef.SQL.Text 的结果里面是有的情况

目前解决的方法,
1、LookupDef.SQL.Text  给这个赋值的时候不要加载条件,不过你的代码需要修改一下,要不很影响性能的
参考

a、只有修改 wzjx 这个字段的时候才进行设置下拉查找属性
b、整个3楼的代码只需要执行一次,因为进行修改wzjx 这个字段的时候,下拉查找属性会自动根据这个值来过滤的


2、不要定义下拉查找属性了,自己搞个查询的界面,然后把值返回到这个字段上就可以了


个人建议,因为你的数据量很大,不宜用查找属性
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-6 09:38 , Processed in 0.042103 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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