Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

DragDrop в DBGride   Найти похожие ветки 

 
Серг   (2004-04-15 22:51) [0]

Извените за ламерский вопрос.Можно ли в DBGride выбрать запись и перенести ее выше-ниже, т.е. сделать DragDrop?


 
tERRORist ©   (2004-04-15 22:54) [1]

Нужно делать руками: создавать локальный датасет и удалять запись, а потом вставлять в нужном месте. События Грида использовать только для определения записи и места куда вставлять.


 
Серг   (2004-04-15 23:04) [2]

Спасибо, щаз попробуем.


 
Серг   (2004-04-15 23:24) [3]

Я DragDrop никогда не делал. Вот код

procedure TForm6.DBGrid2DragDrop(Sender, Source: TObject; X, Y: Integer);
var Pos: TPoint;
begin
Pos.X:=X;
Pos.Y:=Y;
IBTable3.Insert;
IBTable3FIO.AsString:=Rec1;
IBTable3NAME.AsString:=Rec3;
IBTable3TLF.AsString:=Rec4;
IBTable3ZONE.AsString:=Rec5;
IBTable3.Post;
IBTable3.ApplyUpdates;
end;

procedure TForm6.DBGrid2DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
begin
accept:=true;
Rec1:=IBTable3FIO.AsString;
Rec3:=IBTable3NAME.AsString;
Rec4:=IBTable3TLF.AsString;
Rec5:=IBTable3ZONE.AsString;
DataModule1.IBTable3.Delete;
end;

Почему-то в таблице все записи удалились к едрене фене. Процедура DBGrid2DragDrop ни разу не выполнилась, а DBGrid2DragOver как зациклилась.


 
ЮЮ ©   (2004-04-16 02:58) [4]

>Почему-то в таблице все записи удалились к едрене фене

Потому что DragOver возникает всё время, пока ты тащишь мышь, и используется для определения можно ли Drop-нуть в этом месте, то что ты Drag-нул. А момент Drag-анья обрабатываеися в OnStartDrag.

P.S. даже если тебе и удастся "вставить" строку в "нужное" место грида, то при следующем открытии таблицы она будет или в её конце(при отключенных индексах) или в положенном месте в соответствии со значением индексного поля. Если грид показывает запись в определенном месте, то ИМЕННО ТАМ её место :-)


 
kaif ©   (2004-04-16 03:00) [5]

Событие DragOver срабатывает тысячи раз, пока ты водишь мышью над сеткой. Поэтому все записи и удалились к ядреней фене. Так что так делать нельзя. Запоминай все что нужно в событии BeginDrag (или как оно называется - не помню). В общем, в момент начала драга. И не удаляй сразу запись, так как:
1. У тебя все сразу собъется в гриде после удаления записи
2. Ты навсегда потеряешь запись, если отпустишь мышь за пределами сетки.
Делать все это надо в конце одним махом. Лучше внутри транзакции, которая специально стартует и потом коммитится. И еще с ключами нужно разобраться. Что значит у тебя "записи переставить"?


 
kaif ©   (2004-04-16 03:03) [6]

ЮЮ меня опередил на 2 секунды :)


 
kaif ©   (2004-04-16 03:06) [7]

Кстати, если это IB и пользователей много, и все они заняты чем-то похожим над этой таблицей, то эта запись может оказаться вообще где угодно, если не привести к deadlock-у.



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.043 c
1-1080204864
new
2004-03-25 11:54
2004.04.11
Индивидуальный номер


1-1082556913
russko
2004-04-21 18:15
2004.04.11
Ошибка: Invalid floating point operation


11-1059639598
Kirill
2003-07-31 12:19
2004.04.11
EditBox


14-1081959606
TButton
2004-04-14 20:20
2004.04.11
Мииилая мояяяя...


14-1079338777
IceBeerg
2004-03-15 11:19
2004.04.11
Help! Комп не включается