Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизDragDrop в DBGride Найти похожие ветки
← →
Серг (2004-04-15 22:51) [0]Извените за ламерский вопрос.Можно ли в DBGride выбрать запись и перенести ее выше-ниже, т.е. сделать DragDrop?
← →
Серг (2004-04-15 22:51) [0]Извените за ламерский вопрос.Можно ли в DBGride выбрать запись и перенести ее выше-ниже, т.е. сделать DragDrop?
← →
tERRORist © (2004-04-15 22:54) [1]Нужно делать руками: создавать локальный датасет и удалять запись, а потом вставлять в нужном месте. События Грида использовать только для определения записи и места куда вставлять.
← →
tERRORist © (2004-04-15 22:54) [1]Нужно делать руками: создавать локальный датасет и удалять запись, а потом вставлять в нужном месте. События Грида использовать только для определения записи и места куда вставлять.
← →
Серг (2004-04-15 23:04) [2]Спасибо, щаз попробуем.
← →
Серг (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-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. даже если тебе и удастся "вставить" строку в "нужное" место грида, то при следующем открытии таблицы она будет или в её конце(при отключенных индексах) или в положенном месте в соответствии со значением индексного поля. Если грид показывает запись в определенном месте, то ИМЕННО ТАМ её место :-)
← →
ЮЮ © (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:00) [5]Событие DragOver срабатывает тысячи раз, пока ты водишь мышью над сеткой. Поэтому все записи и удалились к ядреней фене. Так что так делать нельзя. Запоминай все что нужно в событии BeginDrag (или как оно называется - не помню). В общем, в момент начала драга. И не удаляй сразу запись, так как:
1. У тебя все сразу собъется в гриде после удаления записи
2. Ты навсегда потеряешь запись, если отпустишь мышь за пределами сетки.
Делать все это надо в конце одним махом. Лучше внутри транзакции, которая специально стартует и потом коммитится. И еще с ключами нужно разобраться. Что значит у тебя "записи переставить"?
← →
kaif © (2004-04-16 03:03) [6]ЮЮ меня опередил на 2 секунды :)
← →
kaif © (2004-04-16 03:03) [6]ЮЮ меня опередил на 2 секунды :)
← →
kaif © (2004-04-16 03:06) [7]Кстати, если это IB и пользователей много, и все они заняты чем-то похожим над этой таблицей, то эта запись может оказаться вообще где угодно, если не привести к deadlock-у.
← →
kaif © (2004-04-16 03:06) [7]Кстати, если это IB и пользователей много, и все они заняты чем-то похожим над этой таблицей, то эта запись может оказаться вообще где угодно, если не привести к deadlock-у.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.045 c