powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [TDBGrid] добавление новой записи _ниже_ текущей
25 сообщений из 27, страница 1 из 2
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666238
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После TDataSet.Insert в TDBGrid добавляется запись выше текущей. Как сделать чтобы новая запись появлялась ниже?

Есть ещё методы, кроме того, чтобы перед TDataSet.Insert делать TDataSet.Next?
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666267
shitikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
.Append
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666359
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shitikov.Append

Append добавляет в конец, а нужно ниже текущей.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666384
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Next+Insert ?
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666413
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftNext+Insert ?

TUnknownЕсть ещё методы, кроме того, чтобы перед TDataSet.Insert делать TDataSet.Next?
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666422
Артем_84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дык после обновления набора все записи отсортируются по индексу, какая разница куда вставлять?
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666428
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В исходниках TDBNavigator подцепиться не к чему, там есть только TDBNavigator.BeforeAction. Там сразу вызов
Код: plaintext
Insert;
и можно написать только нежелательный
Код: plaintext
Next;
. В исходниках TDBGrid не удалось найти явное место Insert, к которому бы удалось легко подцепиться.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666439
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Артем_84дык после обновления набора все записи отсортируются по индексу, какая разница куда вставлять?

Нужно чисто визуальное решение. При вставке в базу новая запись будет связана с предыдущей. Должно быть визуально похоже на вставку новой записи в ту запись, на которой стоим.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666446
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknown> Insert;и можно написать только нежелательный Next;

Ты не понимаешь, что такое Insert (вставка).
Вставить можно до. Вставка после - это Append.

TUnknown> Нужно чисто визуальное решение.

1. Свой грид
2. IMD.
3. Вставка с учетом сортировки - т.е. со значением
поля больше/меньше, чем у текущей записи.

P.S. Хотя чем не подходит Next - непонятно.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666447
alex0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknownАртем_84дык после обновления набора все записи отсортируются по индексу, какая разница куда вставлять?

Нужно чисто визуальное решение. При вставке в базу новая запись будет связана с предыдущей. Должно быть визуально похоже на вставку новой записи в ту запись, на которой стоим.
отсортировать (order by) так чтобы она именно так и выводилась
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666508
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам2. IMD.
3. Вставка с учетом сортировки - т.е. со значением
поля больше/меньше, чем у текущей записи.

что такое "IMD"? по форуму упоминается без определения.

что нужно заполнить, чтобы после
Код: plaintext
Insert;
пустая запись в гриде рисовалась после текущей ещё до того, как будет Post? Где новая запись будет после Post- в данном случае не важно.

alex0отсортировать (order by) так чтобы она именно так и выводилась

видимо, только после Post? Нужна видимость именно до Post.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666529
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknown> что такое "IMD"? по форуму упоминается без определения.

In-Memory DataSet.

TUnknown> что нужно заполнить, чтобы после Insert; пустая запись в гриде
TUnknown> рисовалась после текущей ещё до того, как будет Post?

1. В гриде нет никаких записей. Обычные гриды (в т.ч. TDBGrid)
отображает записи датасета в том порядке, в котором они идут.
Также большинство гридов не сортирует/переставляет записи самостоятельно.
2. До Post есть куча других событий и их обработчиков.

TUnknown> Где новая запись будет после Post- в данном случае не важно.

Однако... Можно все же поинтересоваться откуда вытекает
эта задача и чем принципиально не подходит Next ?

P.S. А еще я думал, редактирование "в гриде" наконец кануло в Лету. Ошибался...

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666582
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамМожно все же поинтересоваться откуда вытекает
эта задача и чем принципиально не подходит Next ?

P.S. А еще я думал, редактирование "в гриде" наконец кануло в Лету. Ошибался...

Задача- попытка достаточно сложного форматирования информации в стандартном гриде при желательном сохранении редактирования.

Грид можно редактировать хотя бы потому, что такая возможность в нём стандартно предусмотрена. Даже сравнительно удобно предусмотрена. А можно не редактировать.

Зависит от задачи.

За неимением другого метода придётся воспользоваться
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
       if  RecordCount > RecNo  then 
         Next
       else 
       begin 
         Append ;
         Abort ;  // волюнтаризм 
       end  ;
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666593
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknown
Код: plaintext
RecordCount
У стандартного TDataSet RecordCount равен -1.
У остальных - где как...
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666597
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамчем принципиально не подходит Next ?

Его нужно вешать на контрол ввода новой записи, кнопку или TDBNavigator. Хотелось обойтись гридом.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666601
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftУ остальных - где как...

Рассматриваем случай SDAC. Там работает.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666610
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknownmiksoftУ остальных - где как...Рассматриваем случай SDAC. Там работает.И даже дает правильное значение до того, как выбраны все записи?

Я бы предложил контролировать EOF. Оно, имхо, как-то понадежнее будет...
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666620
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftИ даже дает правильное значение до того, как выбраны все записи?

Я бы предложил контролировать EOF. Оно, имхо, как-то понадежнее будет...

В данном случае выбираются все записи. EOF на последней записи не работает в случае, если был Next с предпоследней.

У меня SDAC.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666637
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknown> За неимением другого метода придётся воспользоваться
> if RecordCount > RecNo then
> Next
> else
> begin
> Append ;
> Abort ; // волюнтаризм
> end ;

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

TUnknown> Его нужно вешать на контрол ввода новой записи, кнопку
TUnknown> или TDBNavigator. Хотелось обойтись гридом.

Нет. Еще раз повторяю - у датасета есть вагон событий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35666775
OracleX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknownУ меня SDAC.локальная сортировка задействована?
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35667372
Gwa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам
P.S. А еще я думал, редактирование "в гриде" наконец кануло в Лету. Ошибался...


Это детская болезнь.. вроде кори..
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35667421
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНе понял этого куска кода. Он не то чтобы неправильный, он просто бессмысленный.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
 procedure  TForm1.DBNavigator1BeforeAction ( Sender : TObject ; Button : TNavigateBtn ) ;
 var  DSO : TDataSource ;
    DSE : TDataSet ;
 begin 
    if  ( Button <> nbInsert )  or   not  ( Sender  is  TDBNavigator )  then  Exit ;
   DSO := TDBNavigator ( Sender ).DataSource ;
    if   not  assigned ( DSO )  then  Exit ;
   DSE := DSO.DataSet ;

    with  DSE  do 
       if  RecordCount > RecNo  then 
         Next
       else 
       begin 
         Append ;
         Abort ;
       end  ;
 end  ;

в полном виде более понятно? При наличии такого обработчика дбнавигатор визуально вставляет запись ниже текущей записи.

Гаджимурадов РустамЕще раз повторяю - у датасета есть вагон событий.

как по датасету получить грид, смотрящий на него? Перебирать все компоненты приложения или, в лучшем случае, указанной формы? Про существование TGridDataLink знаю.

Пытаюсь сделать это в "общем" виде, когда есть "универсальный" обработчик и он ничего не знает о программе, кроме того, что можно получить через Sender или подобными методами.

OracleXTUnknownУ меня SDAC.локальная сортировка задействована?

Нет. Были проверены AfterInsert,BeforeInsert,OnNewRecord,OnCalcFields. Никто из них не позволяет при указанном значении поля из IndexFieldNames вставлять запись в грид в требуемом визуальном порядке до Post.
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35667940
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknown> в полном виде более понятно?

Чуть более. В изначальном варианте Insert не наблюдался.

TUnknown> как по датасету получить грид, смотрящий на него?

Никак. Потому что его может не быть или их может быть много.
Решение перебирать компоненты - одно из возможных. Только
вот грид может находиться вообще в другой форме и т.д.

Насчет событий - Вы просто не разобрались. Используйте Next.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35668062
tunknown
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамTUnknown> в полном виде более понятно?

Чуть более. В изначальном варианте Insert не наблюдался.

имеется в виду это?
Код: plaintext
    if  ( Button <> nbInsert )  or   not  ( Sender  is  TDBNavigator )  then  Exit ;
слово "инсерт" больше в коде не упоминалось

Гаджимурадов РустамTUnknown> как по датасету получить грид, смотрящий на него?

Никак. Потому что его может не быть или их может быть много.
Решение перебирать компоненты - одно из возможных. Только
вот грид может находиться вообще в другой форме и т.д.

Какие есть ещё решения кроме перебора компонентов или написания собственных?

Гаджимурадов РустамНасчет событий - Вы просто не разобрались. Используйте Next.

Код: plaintext
1.
2.
3.
 procedure  TForm1.MSQuery1BeforeInsert(DataSet: TDataSet);
 begin 
   DataSet.Next;
 end ;

Не работает на последней записи! Разве как-то можно "заменить" TDataSet.Insert на TDataSet.Append в процессе выполнения самого инсерта?
...
Рейтинг: 0 / 0
[TDBGrid] добавление новой записи _ниже_ текущей
    #35668128
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TUnknown> Какие есть ещё решения кроме перебора компонентов или написания собственных?

Нормальных - никаких.

TUnknown> Не работает на последней записи!

Дык и не должно. Кто вам мешает проверить, что запись последняя и не делать Next ?

TUnknown> Разве как-то можно "заменить" TDataSet.Insert на TDataSet.Append в процессе выполнения самого инсерта?

Можно. Отменить Insert и сделать Append. Предварительно
позаботившись о том, чтобы не уйти в рекурсию.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / [TDBGrid] добавление новой записи _ниже_ текущей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]