禁用TDBGrid上的编辑选项不起作用

时间:2011-12-29 09:40:52

标签: c++builder dbgrid c++builder-6

在运行时动态创建TDBGrid组件时,我无法禁止用户编辑单元格中的值。这就是我试图完成这种行为的方式:

TDBGrid *DbGrid = new TDBGrid(Owner);
DbGrid->Options = DbGrid->Options >> dgEditing;

在表单设计器中禁用 dgEditing 时,所有功能都正常运行。我找不到这两种情况之间的区别。如何禁用DBGrid单元格的编辑?

3 个答案:

答案 0 :(得分:3)

诀窍是以下列方式执行此操作:

DbGrid->选项= TDBGridOptions(DbGrid->选项)>> dgEditing

但我不知道有什么区别。

答案 1 :(得分:0)

我对C ++ Builder的西雅图版本存在同样的问题,因为我无法以编程方式更改DbGrid是允许还是不允许编辑。可以在不需要TDBGridOptions()转换的情况下更改DbGrid-> Options值,但DbGrid不遵循DbGrid->选项设置的内容。如果在对象检查器中为dgEditing设置了它们,则DbGrid始终允许编辑,无论DbGrid-> Options.dgEditing的状态是什么,如果在对象检查器中禁用dgEditing,则DbGrid永远不允许编辑。它首先是APPEARS工作(即行与单元格的高位变化)。我使用DbGrid-> Options.ToInt()和DbGrid-> Options.Contains(dgEditing)测试了这一点,以确保我不会绊倒自己。

答案 2 :(得分:0)

我终于找到了让它发挥作用的方法。

如果将dgEditing设置为true(对象检查器中DBGrid的选项),则可以随时进行编辑。然后,在不允许用户编辑时设置DBGrid->ReadOnly=false

我试图设置个人DBGrid->Columns->Items[ii]->ReadOnly=false没有任何运气。该计划并没有阻止我这样做,但它确实忽略了我所拥有的一切。

我用最少的组件编写了一个特殊的小测试程序,只需在对象检查器中将dgEditing设置为true,然后在我想要防止时将dgEditing更改为false,就可以获得良好的结果用户从编辑,但当我把它放入我的完整程序时,有些东西阻止DBGrid工作。

DBGrid->ReadOnly也可能是其他人的解决方法。