Вставка после последней записи (внизу), показанной в DBGrid

Какой должен быть код для вставки после последней записи с помощью ClientDataSet?

Я пробовал следующее:

cdsSomething.Last;
cdsSomething.Insert:

Но, похоже, вместо этого он заменяет последнюю запись. Я уверен, что для этого должен быть быстрый код.


person Juke    schedule 27.01.2020    source источник


Ответы (2)


Метод добавления записи в конец набора данных (не говоря уже о любом индексе) — Append. Вам даже не нужно звонить Last раньше.

cdsSomething.Append;

Insert вставляет строку перед выбранной записью, поэтому с вашим кодом новая запись должна стать предпоследней записью.

person Uwe Raabe    schedule 27.01.2020
comment
@GolezTrol: все движения, такие как «Следующее», «Предыдущее», «Первое», «Последнее», внутренне вызывают CheckBrowseMode, который гарантирует, что любые изменения будут сохранены перед выполнением движения. - person Uwe Raabe; 27.01.2020
comment
Я знал это! Для этого есть очень быстрый код. Хотя, когда я использую это через TButton, он фокусируется на новой строке под первым столбцом, но мне все равно нужно щелкнуть по ней мышью, чтобы иметь возможность вводить данные. Это незначительная проблема, но если для этого есть один щелчок, тем лучше. Это означает, что после добавления я мог сразу ввести данные. - person Juke; 28.01.2020
comment
Похоже, кнопка крадет фокус у сетки. Попробуйте позвонить <NameOfTheGrid>.SetFocus; после звонка Append. - person Uwe Raabe; 28.01.2020
comment
Идеальный! @UweRaabe Большое спасибо! - person Juke; 29.01.2020

В общем, появление добавленной записи (или, фактически, любой записи) в DBGrid не зависит от операций над набором данных, которые использовались для ее вставки.

На самом деле DBGrid не имеет отношения к этому вопросу, потому что он просто отображает добавленную строку в ClientDataSet в той позиции, в которой добавленная строка встречается в CDS, в соответствии с ее текущим порядком индекса.

Так, например, если CDS содержит поле целочисленного идентификатора, и его текущий индекс является этим полем идентификатора (например, потому что свойство IndexFieldNames CDS установлено на «ID»), чтобы добавленная строка отображалась в конце, все, что вам нужно сделать, это установить его значение идентификатора на что-то большее, чем любая существующая запись в CDS. Если поле имеет тип ftAutoInc, это, конечно, произойдет автоматически.

Уве Раабе ответил на этот вопрос несколько иначе. То, что он говорит, правильно, если CDS не использует какой-либо индекс, поэтому записи отображаются в том физическом порядке, в котором они появляются в файле данных CDS. Однако полагаться на физический порядок для определения порядка отображения не обязательно хорошая идея, если порядок отображения важен. Если это так, то используйте индексированное поле (или поля) для определения порядка.

person MartynA    schedule 27.01.2020
comment
Спасибо за ваши взгляды. На самом деле я пока не использую какой-либо индекс. Я запомню это на случай, если в будущем мне понадобится. Уверен, я с этим столкнусь. - person Juke; 28.01.2020