Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
7-1079718031
Шнур
2004-03-19 20:40
2004.05.09
Hook


1-1082521589
zsv
2004-04-21 08:26
2004.05.09
Проверка на существование


3-1081744611
Bizon
2004-04-12 08:36
2004.05.09
Checkbox в DBGride


7-1079269377
Skaner
2004-03-14 16:02
2004.05.09
CD-ROM


3-1081586401
Laymer
2004-04-10 12:40
2004.05.09
Lookup в DBE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский