通过多个Field过滤ClientDataSet

时间:2015-07-22 12:50:09

标签: delphi delphi-xe2 tcxgrid

以下代码允许我按一个字段过滤clientdataset:

begin
dmodule.cds.DisableControls;
try
  dmodule.cds.Filtered := False;

  dmodule.cds.FilterOptions := [foCaseInsensitive,foNoPartialCompare];
  dmodule.cds.Filter := 'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%');

  dmodule.cds.Filtered := True;
finally
  dmodule.cds.EnableControls;
end;

我在第一个&cds.Filter'之后添加了另一行。我认为允许我过滤另一个字段的行,但它不会带回任何记录。

该行是:

dmodule.cds.Filter := 'Field2 LIKE '+ QuotedStr('%'+ editSearch.Text + '%');

我是否需要做其他事情以允许多重过滤?

谢谢,

2 个答案:

答案 0 :(得分:2)

您只需将它们与and结合使用(如果需要,您还可以使用or):

begin
  dmodule.cds.DisableControls;
  try
    dmodule.cds.Filtered := False;

    dmodule.cds.FilterOptions := [foCaseInsensitive,foNoPartialCompare];
    dmodule.cds.Filter := 'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%') +
                          'AND Field2 LIKE ' + QuotedStr(editSearch2.Text) + '%');


    dmodule.cds.Filtered := True;
  finally
    dmodule.cds.EnableControls;
  end;

答案 1 :(得分:2)

您的第二行基本上 替换 第一行中的过滤器。你可能想要:

dmodule.cds.Filter := 
         'Field LIKE '+ QuotedStr('%'+ editSearch.Text + '%') + 
     ' OR Field2 LIKE '+ QuotedStr('%'+ editSearch.Text + '%');

注意:我假设你想要OR,因为你对没有返回任何数据感到惊讶。当然,如果您要求两个条件都为True以返回数据,那么使用AND;但是你仍然没有记录。