1

Devart UniQuery のマスター詳細オプションを使用して選択されたレコードを示す 2 つのグリッドを持つフォームがあります。これは、マスターに関連する必要なレコードを詳細に表示するのに非常にうまく機能しています。フィルターを使用してレコード (会社) を選択するオプションがあります。これは、それぞれに文字が付いた30個のボタンによって行われ、1つを押すと、このコードでフィルターを設定します

procedure TfrmJsCompanies.ButtonClick(Sender: TObject);
var
  ButtonValue: char;
  FilterString: string;
begin
  ButtonValue := (Sender as TcxButton).Caption[1];
  FilterString := ButtonValue + '%';
  with grdCompaniesView1.DataController.Filter.Root do
    begin
      Clear;
      BoolOperatorKind := fboOr;
      AddItem(colCompany_Name, foLike, FilterString, FilterString);
    end;
  grdCompaniesView1.DataController.Filter.Active := True;
  grdCompaniesView1.FilterRow.Visible := False;
  ActiveControl := grdCompanies;
end;

これを行うと、最初に詳細レコードを持つマスター レコードを表示するボタンを押してから、マスター レコードを表示しないボタンを押さない限り、期待どおりの結果が得られます。この場合、前の選択からの詳細レコードはまだ残っています。詳細グリッドに表示

これを取り除くにはどうすればよいですか?

4

1 に答える 1

3

この動作は、フィルタリングが cxGrid レベルで実行され、DataSet レベルでは実行されず、その結果、DataSet がフィルタリングされないことが原因で発生します。
それに対処する1つの方法は次のとおりです。

procedure TForm1.DetailViewFilterRecord(ADataController: TcxCustomDataController; ARecordIndex: Integer;
  var Accept: Boolean);
begin
  Accept := MasterView.DataController.FilteredRecordCount >0;
end;

procedure TForm1.MasterViewDataControllerFilterChanged(Sender: TObject);
begin
   DetailView.DataController.Refresh
end;
于 2013-01-15T05:57:21.537 に答える