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