今天花了一整天时间研究了DbgridEh强大的过滤功能 还是不够透彻。首先,我谈谈为什么要很重视这个功能。自己也做了不少项目,但是为里面的查询伤透脑筋。要单独做一块查询的模块,很费精力,而且经常让客户不满意,
经常要改。
比如 做一个很简单的功能模块“商品信息 ”管理,一共有上万条记录,如果以后软件写好后,交到客户手上。没有强大的查询功能,客户不窝火才怪。所以这五六年来,我就一直尝试,最终打算写在控件里面,能够实现所有的查询功能。开发人员解放啦,再也不用做什么查询,客户感觉也爽了。当然,我这里指的查询,其实不是给query.sql 重新赋值,然后重新query.open. 这种方法很傻,效率也低。最关键是没有解放开发人员的劳动。
我这里指的查询实际就是过滤,基本用 query.filter  。前段时间发现dbgrideh有这种按照每个字段查询的功能
大家看看我做的这个效果。实际上就是把 
dbgrideh.STFilter.Local:=true;
dbgrideh.STFilter.Visable:=true; 
就行了。但是我使用还不太熟悉。比如这里的“最大库存”,我使用的查询条件是 >21 . http://www.daizhicun.com/dmx/pic/dbgridfilter.JPG 现在想查询出"最大库存" 在21~ 100之间的查询条件不知道该如何写。
我尝试了(>21)&(<100) ,结果报错,
希望朋友们探讨一下,提供一些查询的例子。
这里其实可以写出很多复杂查询条件。
研究了dbgrideh的源代码,
还是不太熟悉,
我找到得认为最关键的地方是:
function ParseSTFilterExpression(Exp: String; var FExpression: TSTFilterExpressionEh): Boolean;
函数里面的:
    p := SkipBlanks(Exp, p);
    v := GetLexeme(Exp, p, op, PreferCommaForList);
希望大家多多给出一些查询写法的例子,也多多讨论大家在工作中如何实现查询功能的。

解决方案 »

  1.   

    dbgrideh.STFilter.Local
    dbgrideh.STFilter.Visable为什么我找不到的?
      

  2.   

    支持楼主
    我用了这么长时间的DBGridEh,但还从没用过STFilter功能!请问楼主是用什么版本的,
    我的好像没有找到STFilter
      

  3.   

    建议楼主试用一下DevExpress的csGrid,个人感觉功能比DBGridEh强n倍。
      

  4.   

    cxGrid我研究过,太复杂,而且查询需要弹出新窗体,我不喜欢这种风格。
      

  5.   

    '1''>=1''>1 AND <=5''~ TestStr%''!~ TestStr_''in (1,2,3,4,5,6) and >100''in (Str1,Str2,Str3)'EhLib Software
      

  6.   

    樓主,上次我碰到問題想向你詢問下,可是找不到聯系方式,我的郵箱是[email protected],我現在也對Eh比較有興趣,可是功底不深厚,呵呵。