TcxGrid中的某些行隐藏TcxEditButton

问题描述:

我已经实现了一些带有一些列的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; 

使用类型为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

在TcxGridDBTableView上使用OnInitEdit事件。

+0

我相信oninitedit是在单元格进入编辑模式之前触发的。这不是我想要的。 我需要一个事件,每次在列中绘制所有单元格时调用,并且可以从当前行的单元格中读取数据(行索引或直接从mem数据集中读取数据),而且我还可以获取实际按钮项目(不是单元格,而是单元格的内容)。 – 2012-04-27 18:27:56