2012-04-27 214 views
3

我已經實現了一些帶有一些列的TcxGrid。此網格最後一列中的單元格包含TcxEditButton類型的按鈕。TcxGrid中的某些行隱藏TcxEditButton

網格內容由用戶輸入,或者在創建父窗體時從文本文件加載。

我想隱藏一些基於網格中的值的這些按鈕。 確定按鈕可見性的值可以從網格內存數據集中讀取,也可以直接從網格中的隱藏列讀取。

我的問題是,我一直無法找到正確的事件來檢查值,並設置按鈕可見性屬性。我試圖在網格表和包含按鈕的列上使用各種事件。

任何關於如何獲取按鈕項的建議,同時能夠在繪製網格時設置此選項?

解決方案: 如果接受的解決方案使用修改後的版本,則結束。

procedure TFrame_cx_Element_Inntasting_Kriterier.cxGrid_InntastingDBTVPropertiesGetProperties(
    Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; 
    var AProperties: TcxCustomEditProperties); 
begin 
    if ARecord.Values[cxGrid_ColumnWithValidatedValue.Index] = true then 
    AProperties := cxEditRepository1ButtonItem1.Properties 
    else 
    AProperties := cxEditRepository1Label1.Properties; 
end; 

回答

4

使用類型爲TcxEditButton的列的OnGetProperties事件。

使用ARecord,您可以根據列索引獲取同一行另一列的值。

設置屬性的最簡單方法是在TcxEditRepository中使用兩個預先定義的TcxEditButtons,例如名爲ButtonsVisible和ButtonsInvisible。

事件會比這個樣子:

procedure TForm1.cxGrid1TableView1EditButtonColumnGetProperties(
    Sender: TcxCustomGridTableItem; ARecord: TcxCustomGridRecord; 
    var AProperties: TcxCustomEditProperties); 
var 
    Value: Variant; 
    Buttons: TcxEditButtons; 
    ButtonEnabled : Boolean; 
begin 
    if VarIsNull(ARecord.Values[cxGrid1TableView1ColumnToCheck.Index]) then 
    AProperties := ButtonsInvisible.Properties; 
    // or AProperties := ButtonsVisible.Properties depending on what you want/need 

    Value := ARecord.Values[cxGrid1TableView1ColumnToCheck.Index]; 
    if (Value = ValueWhenVisible) then 
    AProperties := ButtonsVisible.Properties 
    else 
    AProperties := ButtonsInvisible.Properties; 
end; 

希望這將讓你在正確的軌道上。

+0

是的使用這個事件確實讓我走上了正軌。我最終不得不定義一個csEditRepository。爲它添加兩種樣式。一個用於隱藏按鈕的狀態,另一個用於應該可見的狀態。我將發佈代碼以供參考 – 2012-05-02 08:52:21

+0

我收到Undeclared標識符「TcxCustomEditProperties」。你能告訴我我需要包含哪個庫嗎? – 2017-08-09 09:48:34

0

在TcxGridDBTableView上使用OnInitEdit事件。

+0

我相信oninitedit是在單元格進入編輯模式之前觸發的。這不是我想要的。 我需要一個事件,每次在列中繪製所有單元格時調用,並且可以從當前行的單元格中讀取數據(行索引或直接從mem數據集中讀取數據),而且我還可以獲取實際按鈕項目(不是單元格,而是單元格的內容)。 – 2012-04-27 18:27:56