3

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

2 回答 2

4

使用类型为 TcxEditButton 的列的 OnGetProperties 事件。

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

设置属性的最简单方法是在 TcxEditRepository 中使用两个预定义的 TcxEditButton,例如名为 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;

希望这会让你走上正轨。

于 2012-04-28T18:18:00.873 回答
0

在 TcxGridDBTableView 上使用 OnInitEdit 事件。

于 2012-04-27T14:42:31.180 回答