2013-01-14 28 views
1

我有一個2格表格,顯示使用Devart UniQuery上的master-detail選項選擇的記錄。這項工作非常好,詳細顯示了與主人有關的所需記錄。 我可以選擇使用過濾器選擇記錄(公司)。這是由30個按鍵與每一個字母完成,然後按下一個當我設置過濾器,此代碼DevExpress網格中奇怪的過濾器行爲

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; 

如果我這樣做,我得到的結果,我希望,除非我第一次按下一個按鈕,讓我師傅記錄中有詳細記錄,然後在按下一個按鈕後沒有主記錄 - 在這種情況下,來自先前選擇的詳細記錄仍顯示在我的詳細網格中

我該怎麼做才能擺脫這種情況?

+0

它看起來像在網格中的錯誤,這樣做是報告的DevExpress? – jachguate

+0

一個網格將顯示任何在底層數據集中處於活動狀態......(這在窗口之間重複使用數據集時有一些非常好的副作用) –

回答

3

此行爲是由於在cxGrid級別上執行篩選而不是在DataSet級別上執行篩選,結果導致DataSet未被篩選。
一個對付這種方式可能是:

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; 
+0

確實看起來像是在做伎倆。 – OZ8HP