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;
希望这将让你在正确的轨道上。
在TcxGridDBTableView上使用OnInitEdit事件。
我相信oninitedit是在单元格进入编辑模式之前触发的。这不是我想要的。 我需要一个事件,每次在列中绘制所有单元格时调用,并且可以从当前行的单元格中读取数据(行索引或直接从mem数据集中读取数据),而且我还可以获取实际按钮项目(不是单元格,而是单元格的内容)。 – 2012-04-27 18:27:56
是的使用这个事件确实让我走上了正轨。我最终不得不定义一个csEditRepository。为它添加两种样式。一个用于隐藏按钮的状态,另一个用于应该可见的状态。我将发布代码以供参考 – 2012-05-02 08:52:21
我收到Undeclared标识符“TcxCustomEditProperties”。你能告诉我我需要包含哪个库吗? – 2017-08-09 09:48:34