Отключение опции редактирования в TDBGrid не работает - PullRequest
2 голосов
/ 29 декабря 2011

При динамическом создании компонентов TDBGrid во время выполнения я не могу запретить пользователю редактировать значения в ячейках.Вот как я пытаюсь выполнить этот тип поведения:

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

При отключении dgEditing в конструкторе форм все работает правильно.Я не могу найти разницу между этими двумя случаями.Что я должен сделать, чтобы отключить редактирование ячеек DBGrid?

Ответы [ 3 ]

3 голосов
/ 15 февраля 2012

Хитрость заключается в том, чтобы сделать это следующим образом:

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

, но я не знаю, в чем разница.

0 голосов
/ 29 июня 2016

Я наконец нашел способ заставить его работать.

Если вы установите для dgEditing значение true (для параметров DBGrid в Инспекторе объектов), это позволит пользователю редактировать в любое время. Затем установите DBGrid->ReadOnly=false, когда пользователю не разрешено редактировать.

Мне не повезло, когда я пытался установить личность DBGrid->Columns->Items[ii]->ReadOnly=false. Программа не помешала мне сделать это, но она игнорировала все, что у меня было в ней.

Я написал специальную небольшую тестовую программу с минимальным количеством компонентов и смог получить хорошие результаты, просто установив для dgEditing значение true в инспекторе объектов, а затем изменив значение dgEditing на false, когда я хотел запретить пользователю редактирование , но когда я включил его в свою полную программу, что-то помешало DBGrid работать.

DBGrid->ReadOnly может быть решением для кого-то еще.

0 голосов
/ 28 июня 2016

У меня та же проблема с Сиэтлской версией C ++ Builder, что я не могу программно изменить, разрешает или запрещает DbGrid редактирование.Значения DbGrid-> Options МОГУТ быть изменены, не требуя приведения TDBGridOptions (), но DbGrid не соответствует назначению DbGrid-> Options.Если они установлены в инспекторе объектов для включенного dgEditing, то DbGrid всегда позволяет редактировать независимо от состояния DbGrid-> Options.dgEditing, и если в инспекторе объектов dgEditing отключен, то DbGrid никогда не разрешает редактирование.Сначала он, кажется, работает (т.е. изменяется подсветка строк и ячеек).Я проверил это, используя DbGrid-> Options.ToInt () и DbGrid-> Options.Contains (dgEditing), чтобы убедиться, что я не спотыкаюсь о себе.

...