TdxMemData 的Bug和使用

aa.CopyFromDataSet(acdsBase);//克隆一个,与LoadFromDataSet区别,如果设置了Field,那么L只会导入设置的部分,而C则是全部复制过来

TdxMemData不能使用Filter。

  ID:=aa.FieldByName('ID').AsString;
  aa.Filter:='ParentID='+QuotedStr(ID);
  if aa.FindFirst then
  repeat
    Prompt(aa.FieldByName('Name').AsString);

  until aa.FindNext=false;

无效。

 

或许是我不会用。

谁会,请指教。

============================================================================

09-02-23

一次偶然的机会找到一点代码。

 

procedure TfrmReportEmpSalary.dxBarButton2Click(Sender: TObject);
begin
  inherited;
  dxMemData1.DisableControls;
//  dxMemData1.ProgrammedFilter:=true;//这里可以不要
  dxMemData1.Filtered:=false;
  dxMemData1.ProgrammedFilter:=false;//设置false,直接用OnFilterRecord事件来判断。
//  dxMemData1.Filter:='EnterpriseNo='+QuotedStr('DYJQY');//这里写什么都没用。
  dxMemData1.Filtered:=true;
  dxMemData1.EnableControls;

end;

procedure TfrmReportEmpSalary.dxBarButton3Click(Sender: TObject);
begin
  inherited;
  with dxMemData1 do
  begin
    DisableControls;
    try
//      ProgrammedFilter:=false;//这里可以不要

      Filtered:=false;
      ProgrammedFilter:=true;//设置true,代码控制

      First;
      while not eof do
      begin
        if dxMemData1.FieldByName('EnterpriseNo').AsString='DYJQY' then
          FilterList.Add(Pointer(dxMemData1.CurRec+1));//是保存在FilterList里的。
        Next;
      end;
      Filtered:=true;
    finally
      EnableControls;
    end;
  end;
end;

procedure TfrmReportEmpSalary.dxMemData1FilterRecord(DataSet: TDataSet;
  var Accept: Boolean);
begin
  inherited;
  Accept:=DataSet.FieldByName('EnterpriseNo').AsString='EJXDQY';

end;

procedure TfrmReportEmpSalary.dxBarButton4Click(Sender: TObject);
begin
  inherited;
  Prompt(IntToStr(dxMemData1.FilterList.Count));
end;

原文地址:https://www.cnblogs.com/key-ok/p/3380431.html