Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Перетаскивание данных в гриде пользователем


Автор: Lunatikus 24.7.2007, 10:19
СУБД MS SQL Server 2000.Компонент DBGrid.

Вот грид с данными:

http://win.mail.ru/cgi-bin/readmsg/Bezymyannyi.bmp?id=11852622420000009398;0;1&mode=attachment&channel=

Вопрос-существует ли возможность мышкой переносить данные "машина" в другую ячейку данного поля,а также той же мышкой сдвигать цветные границы(цвет поля определяется по значению скрытого поля id_interval,везде,где светло-синий, там поле id_interval=1,где темно-синий - id_interval=2).Имею в виду,какие осбытия надо обрабатывать и какие методы использовать?вопрос,не спорю,смутный.Если чтото не до конца понятно,объясню подробнее.

Автор: Savek 24.7.2007, 13:32
Посмотриhttp://igp.org.ua/articles/a154/?PHPSESSID=e0fca010ff8000166eae997346027418, разберешься в алгоритме, сможешь заточить под свои нужды

Автор: Akella 24.7.2007, 15:48
Lunatikus, а что это ты за ссылку дал?

Автор: Lunatikus 24.7.2007, 16:16
опс,прошу прощения за неправильную ссылку-через мейл пытался картинку показать )) В принципе и без нее вопрос,думаю,понятен.Сижу разбираюсь в коде,что подкинул Savec.=) 

Автор: Marduk 30.7.2007, 10:34
Перетаскивание в DBGrid:
Код

type
 TDBNew = class(TDBGrid); // определяем новый тип, чтобы было доступен метод MouseCoord из секции protected
 end;
.... 
procedure Tform1.DbGrid1DragDrop(Sender, Source: Tobject; X, Y: Integer);
var
 gc: TGridCoord;
begin
 gc := TDBNew(DBGrid1).MouseCoord(x,y);
 if (gc.y > 0) and (gc.x > 0) then
  begin
   dbgrid1.datasource.dataset.moveby(gc.y - tdbnew(dbgrid1).row);
   dbgrid1.datasource.dataset.edit;
   dbgrid1.columns.items[gc.x - 1].field.asstring := Edit1.text; //текст перетаскиваемого Edit
  end;
 dbgrid1.setfocus;
end;

здесь пример на тектовом поле таблицы и перетаскиваемом edit'e

Первая операция определяет ячейку над которой была отпущена кнопка мыши. обладая координатами курсора мыши, обращаемся к методу MouseCoord для того чтобы определить столбец и строку в таблице. Если целевая ячейка располагается не в первом ряду, в котором обычно находится заголовок, и не в первом столбце, в котором находится индикатор, то перемещаем указатель на текущую запись, используя разницу между номером строки (gc.y) и текущей активной строкой. Далее переводим набор данных в режим редактирования, извлекается значение поля из целевого столбца и изменяется его текст.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)