Главная страница
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.034 c
9-1046962397
H[eX]
2003-03-06 17:53
2004.04.11
Освещение в 2д


14-1079514659
Androgin
2004-03-17 12:10
2004.04.11
Что значят следующие значения в Bios e?


3-1081482425
ev
2004-04-09 07:47
2004.04.11
Как по клику на столбец в DBgrid сортировать его??


9-1071030267
Kair
2003-12-10 07:24
2004.04.11
Скорость вращения


1-1080151683
Роман
2004-03-24 21:08
2004.04.11
BMP -> массив