为TcxGrid中的某些行隐藏TcxEditButton

时间:2012-04-27 14:00:39

标签: delphi datagrid components devexpress tcxgrid

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

2 个答案:

答案 0 :(得分: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;

希望这会让你走上正轨。

答案 1 :(得分:0)

在TcxGridDBTableView上使用OnInitEdit事件。