2017-05-09 57 views
0

在丟失與DBlookupcombox類型的CxGrid中的列綁定的數據集之後,我丟失了之前選定的lookupdata。 請在下面找到詳細信息。在CxGrid中過濾數據集之後鬆開先前選定的數據

我們有基於ID,我們獲取的「廣場」,從表PlaceMapping它的類型是DBLookupComboBox的(下cxgrid的性質,我們有這個選項)列

ID | Name | Place 
1 | abc | Place1 
2 | xyz | Place5 
3 | lmn | 
4 | opq | 
5 | rst | 


and another table Client 
ClientID | Name 
1  | abc 
2  | xyz 
3  | lmn 
4  | opq 
5  | rst 

In database, there is a table PlaceMapping 
PlaceMappingID| ClientID | Place 
    1   | 1  | Place1 
    2   | 1  | Place2 
    3   | 2  | Place1 
    4   | 2  | Place5 
    5   | 2  | Place6 

一個cxGrid。

我們在cxGrid列的Place的事件「GetPropertiesForEdit」中添加了過濾器。然而,在用戶選擇任何項目並改變所選項目的焦點之後,地點lookupcombobox將獲得正確的值 。它一片空白。

我曾嘗試刪除過濾器的地方列工作正常,但它獲得的地方的所有值。

示例:對於ID「1」,我們得到值爲Place1和Place2的lookupcombobox。

對於ID「2」,我們使用值Place1,Place5,Place6進行查找。

任何幫助真的很感激。

+1

「在用戶選擇任何項目並且改變焦點從所選項目」焦點更改發生時cxGrid數據集的狀態(TDataSetState)是什麼?無論如何,我認爲這需要一個MCVE(參見StackOverflow/Help/mcve)。 – MartynA

+0

@MartynA數據集處於瀏覽模式。 – mano

回答

1

了兩種方式爲我工作:

方法1: 創建兩個查找表。第一個表綁定到列的編輯器。它必須包含所有行才能在所有查看記錄中正確顯示查找值。第二張表應該被分配到就地編輯器,一旦它被打開。該表格將被過濾以包含適合當前字段/記錄的有限記錄集。

您可以使用包含具有適當參數的WHERE子句的查詢來代替過濾的表格。

方式2: 不是創建額外的數據集,而是直接過濾下拉查找網格。這個網格包含它自己的數據控制器,您可以使用它的所有屬性和方法類似於您爲Grid View執行的操作。

公共部分: Table View對象具有OnInitEdit事件,該事件允許您在顯示前設置就地編輯器。您應該使用此事件來填充組合框項目,篩選查找列表並更改其他編輯器屬性。在這種情況下使用編輯器的OnPopup或OnInitPopup事件並不合適,原因有兩個:a)編輯器需要正確的查找數據才能顯示編輯框值; b)用戶可以在不打開下拉列表的情況下更改編輯值,例如,鍵入列單元格。

在OnInitEdit事件處理程序中,我們: 1)檢查列是否是我們需要修改其編輯器的列; 2)使用當前視圖記錄的值形成輔助查找表的過濾器;方法1:用數據源替換編輯器的列表源,該數據源綁定到過濾的(輔助)查找表;方法2:設置查找數據控制器的過濾器。

+0

我很高興你設法自己解決這個問題,+1發佈你的答案,以幫助未來的讀者。如果我問過這個問題,我會包含以下代碼:a)設置並填充使用的數據集; b)配置TcxGrid以完成我想要做的事情。原因在於,讀者可能能夠提供幫助的唯一方法是如果他們能夠重現問題;如果沒有設置代碼,就會嘗試設置一個測試項目,包括TcxGrid,因爲它有各種各樣的配置選項,操作模式和就地編輯器,所以會有太多的猜測。 – MartynA

+0

@MartynA是注意的 – mano

相關問題