2

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

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

在表单设计器中禁用dgEditing时,一切正常。我找不到这两种情况之间的区别。我应该怎么做才能禁用 DBGrid 单元格的编辑?

4

3 回答 3

3

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

DbGrid->Options = TDBGridOptions(DbGrid->Options) >> dgEditing

但我不知道有什么区别。

于 2012-02-15T10:11:59.030 回答
0

我对西雅图版本的 C++Builder 也有同样的问题,因为我无法以编程方式更改 DbGrid 是允许还是不允许编辑。DbGrid->Options 值可以在不需要 TDBGridOptions() 强制转换的情况下更改,但 DbGrid 不遵循 DbGrid->Options 设置的内容。如果它们在对象检查器中设置为启用 dgEditing,则无论 DbGrid->Options.dgEditing 的状态如何,DbGrid 始终允许编辑,如果在对象检查器中禁用 dgEditing,则 DbGrid 永远不允许编辑。它起初似乎可以工作(即行与单元格的高亮变化)。我已经使用 DbGrid->Options.ToInt() 和 DbGrid->Options.Contains(dgEditing) 对此进行了测试,以确保我不会绊倒自己。

于 2016-06-27T22:12:48.037 回答
0

我终于找到了让它工作的方法。

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

我没有运气尝试设置个人DBGrid->Columns->Items[ii]->ReadOnly=false。该程序并没有阻止我这样做,但它确实忽略了我在其中的任何内容。

我用最少的组件编写了一个特殊的小型测试程序,只需dgEditing在对象检查dgEditing器中将程序,某些东西阻止了DBGrid工作。

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

于 2016-06-29T18:43:23.740 回答