在运行时动态创建TDBGrid组件时,我无法禁止用户编辑单元格中的值。这就是我试图完成这种行为的方式:
TDBGrid *DbGrid = new TDBGrid(Owner);
DbGrid->Options = DbGrid->Options >> dgEditing;
在表单设计器中禁用 dgEditing 时,所有功能都正常运行。我找不到这两种情况之间的区别。如何禁用DBGrid单元格的编辑?
答案 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
也可能是其他人的解决方法。