我使用的的DevExpress TdxMemData在存储器TDataSet的后裔即可。虽然它已经过滤:布尔和Filter:String类型的属性,它似乎并没有真正与他们自动做任何事,而不是依靠OnFilterRecord事件的接受参数的结果。

所以,我正在寻找一种方法(也许它是在TdxMemData或其他地方中的DevExpress的成套码)来解析过滤文本,并将其应用到数据集。

理想我想方式测试靠在过滤器的单独的行,看它是否不进行过滤出来的数据集的匹配(我要强调过滤条件相符的行)。

实施例过滤字符串:

((Name = 'Jim') and (Rep > 1000)) or (Rep > 5000)

因此,有嵌套和的和或的。它实际上是由DevExpress的TcxDBFilterControl建造。

我真的很希望有一些简单的我失踪。

<强>更新我开,看他们是否支持任何形式的解决方案。我发现自己的股票回答他们不支持筛选上TdxMemData。

有帮助吗?

解决方案

我知道这是不是你要找的答案,但TdxMemData数据集不支持过滤字符串。要使用过滤器或者代码自己OnFilterRecord事件或设置ProgrammedFilter为true,并与被过滤的(在运行时)的记录。

列表填充FilterList

一种可能是编写自己的解析器来对在OnFilterRecord事件中的当前记录过滤字符串比较。

其他提示

您可能想看看在更换TdxMemData与 TkbmMemTable 。它是免费的,工作方式类似于DX组件,并支持过滤字符串。可能会少走很多的时间来港过会比以实现OnFilterRecord过滤字符串解析器!它会与其他DX组件的工作原理没有问题。

您要查找的内容不过滤数据,但不同地显示它,如果它满足条件的问题。如果您使用的TDBGrid来显示数据,考虑在TDBGrid中的DrawColumnCell()事件:

procedure TForm1.dbgrd1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
  DBG: TDBGrid;
begin
  DBG := TDBGrid(Sender);
  // Add any other conditions from your 'filter' here in the next line.
  if (YourData.FieldByName('WHATEVER').AsString = 'Jim') and
     (YourData.FieldByName('REP').AsInteger > 1000) then
    Column.Font.Color := clRed;
  DBG.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

由于您使用TdxMemData,你可能使用DevEx格了。它有一个类似的方式做不是默认的图纸以外的东西;你可以使用类似的技术出现。 (I没有用过DevEx东西在几年;当前雇主不喜欢他们,因此不会泉水为代价:-()

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top