Главная страница
    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.035 c
7-1079895576
Gun Expert
2004-03-21 21:59
2004.05.09
Чтение нестандартного значения реестра из Delphi


14-1082129497
X9
2004-04-16 19:31
2004.05.09
Assembler


14-1082528376
VID
2004-04-21 10:19
2004.05.09
Как создать загрузочный диск, который будет видеть NTFS ?


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


11-1066636980
ALEF
2003-10-20 12:03
2004.05.09
неполный mck.zip ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский