在运行时动态创建 TDBGrid 组件时,我不能禁止用户编辑单元格中的值。这就是我试图完成这种行为的方式:
TDBGrid *DbGrid = new TDBGrid(Owner);
DbGrid->Options = DbGrid->Options >> dgEditing;
在表单设计器中禁用dgEditing时,一切正常。我找不到这两种情况之间的区别。我应该怎么做才能禁用 DBGrid 单元格的编辑?
在运行时动态创建 TDBGrid 组件时,我不能禁止用户编辑单元格中的值。这就是我试图完成这种行为的方式:
TDBGrid *DbGrid = new TDBGrid(Owner);
DbGrid->Options = DbGrid->Options >> dgEditing;
在表单设计器中禁用dgEditing时,一切正常。我找不到这两种情况之间的区别。我应该怎么做才能禁用 DBGrid 单元格的编辑?
诀窍是通过以下方式执行此操作:
DbGrid->Options = TDBGridOptions(DbGrid->Options) >> dgEditing
但我不知道有什么区别。
我对西雅图版本的 C++Builder 也有同样的问题,因为我无法以编程方式更改 DbGrid 是允许还是不允许编辑。DbGrid->Options 值可以在不需要 TDBGridOptions() 强制转换的情况下更改,但 DbGrid 不遵循 DbGrid->Options 设置的内容。如果它们在对象检查器中设置为启用 dgEditing,则无论 DbGrid->Options.dgEditing 的状态如何,DbGrid 始终允许编辑,如果在对象检查器中禁用 dgEditing,则 DbGrid 永远不允许编辑。它起初似乎可以工作(即行与单元格的高亮变化)。我已经使用 DbGrid->Options.ToInt() 和 DbGrid->Options.Contains(dgEditing) 对此进行了测试,以确保我不会绊倒自己。
我终于找到了让它工作的方法。
如果将 设置dgEditing
为 true (对于DBGrid
对象检查器中的选项),这将允许用户随时进行编辑。然后,设置DBGrid->ReadOnly=false
何时不允许用户编辑。
我没有运气尝试设置个人DBGrid->Columns->Items[ii]->ReadOnly=false
。该程序并没有阻止我这样做,但它确实忽略了我在其中的任何内容。
我用最少的组件编写了一个特殊的小型测试程序,只需dgEditing
在对象检查dgEditing
器中将程序,某些东西阻止了DBGrid
工作。
这DBGrid->ReadOnly
也可能是其他人的解决方法。