Остановить автоматическое редактирование в TDBGrid

D5, ZEOS 6.6, SQLite.

У меня есть srcAccount.AutoEdit = False;

У меня для всех функций редактирования установлено значение False в параметрах TDBGrid. Единственными параметрами, установленными в значение true, являются индикатор, линии шлифования и заголовки.

У меня есть форма с несколькими TDBEdits и TDBGrid, показывающая все текущие учетные записи.

Когда пользователь нажимает кнопку «Создать» для новой учетной записи, у меня есть

dbedAcct.SetFocus;
tblAccounts.Insert;

Если после нажатия кнопки «Создать» пользователь хочет прокрутить, чтобы проверить имена учетных записей, ИЛИ щелкнуть в сетке, он сохранит новые данные и выйдет из режима вставки.

Как я могу остановить это? Мне нужно, чтобы они могли проверять имена учетных записей.

Или это баг D5? Если да, то как мне обойти это?

Я также пробовал использовать SMDBGrid, и он делает то же самое. http://www.scalabium.com/smdbgrid.htm


person Community    schedule 05.05.2016    source источник


Ответы (1)


Мне нужно, чтобы они могли проверять имена учетных записей.

Вы не можете сделать это, используя ту же сетку + набор данных, если вы разрешаете пользователю вводить данные в сетку. Вы создаете эту проблему для себя, пытаясь использовать сетку для ввода и поиска данных одновременно. Простое решение состоит в том, чтобы использовать сетку для поиска и иметь отдельную форму (или панель в той же форме, что и сетка) для вставки, и они должны быть связаны с разными экземплярами набора данных.

Дело в том, что вы не можете прокручивать набор данных (поскольку вам нужно искать другие записи), пока он находится в середине вставки записи. Состояние dsBrowse, необходимое для прокрутки набора данных, и состояние dsInsert, необходимое для вставки, являются взаимоисключающими. Попытка прокрутить набор данных автоматически опубликует ожидающую вставку, как вы обнаружили.

Итак, вам на самом деле нужно два экземпляра набора данных, один для поиска и один для вставок. Если вы используете два экземпляра ClientDataSet на стороне клиента, это может быть довольно просто из-за легкости, с которой вы можете копировать данные из одного в другой, используя свойство данных CDS (cdsLookup.Data := cdsLive.Data), поэтому создание локальной копии для поиска тривиальный. Или, если хотите, можете использовать клонированный курсор — см. http://edn.embarcadero.com/article/ 29416

person MartynA    schedule 05.05.2016