【发布时间】:2013-02-08 14:13:37
【问题描述】:
我有一个带有多个 TcxGrids 的项目。我项目中网格的类层次结构如下:
TForm->TPanel->TcxPageControl->TcxTabSheet(子类)->TcxGrid->TcxGridLevel->TcxGridDBBandedTableView
在我的子类 TcxTabSheet 中,我添加了一个新属性“ReadOnly”,当 set 循环遍历选项卡表控件并将它们分别设置为启用/禁用时。
当 TcxGrid 控件启用属性设置为 true 时,用户根本无法再与网格交互(包括导航)。
看来我需要在 TcxGridDBBandedTableView 上设置 OptionsData.Editing 属性以实现只读但仍可导航的网格控件。
足够简单,直到您考虑到我想以松散耦合的方式执行此操作,我认为这让我可以选择 RTTI。
我编写了以下循环遍历表单控件的代码(循环遍历选项卡控件或组件不会让我访问 TcxGridDBBandedTableView)。找到控件后,我可以通过 RTTI 设置其编辑属性。我只是似乎无法确定 TcxGridDBBandedTableView 是否属于它所在的 TabSheet。
var
compIdx: Integer;
begin
for compIdx := 0 to Pred(ComponentCount) do
if (Components[compIdx].ClassNameIs('TcxGridDBBandedTableView')) then
SetOrdProp(GetObjectProp(Components[compIdx], 'OptionsData'), 'Editing', Ord(not FReadOnly));
end;
TL;DR 如何确定 cxgrid 所在的 pagectrl 选项卡并设置其 TableView.OptionsData.Editable 属性而不向单元的 uses 子句添加任何 devexpress 单元。
【问题讨论】:
-
获得 cxGrid 所需的 porperty Control 似乎无法通过 RTTI 访问。
-
如何为您的 Readonly 属性添加一个事件,该事件可用于使用 cxGrid 迭代包含的 cxgrids/views 的项目模板中。
标签: delphi devexpress