Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

перетаскивание записей в dbgrid'e [D6, D7, PostgreSQL]


radiant09 ©   (2004-09-09 21:37:00) 

имеется таблица в бд, представляющая из себя утвержденную форму документа [ num№ пункта(int), nameнаименов-е свед. (ch), codeкод свед. (ch)].
 требуется в dbgrid'e реализовать механизм перестановки пунктовс соотв. изменением num в базе, путем перетаскивания записей. 
 буду особенно признателен, если кто-нибудь скинет кусок исходника подобной задачи.


HSolo   (2004-09-10 09:05:00) [1]

Может, я чего-то не понимаю, но зачем перетаскивать-то? У Вас же есть в таблице поле "№ п/п"? Ну так и пусть пользователь его меняет, как ему угодно, а потом жмет кнопку "Упорядочить", по которой выборка сортируется по этому полю.
А при вставке/удалении записей вообще можно автоматически менять значение этого поля, что-нибудь вроде
update MyTable set NumPP = NumPP+1 where NumPP >= :NewNumPP


sniknik   (2004-09-10 08:15:00) [2]

> Мне вот интересно можно ли определить на какой записи стоит курсор,
не надо определять (ничего не даст), а курсор всегда стоит на текушей (в рекордсете) записи.

ну если хочется
type
 TMyDBGrid = class(TDBGrid);

и дальше
 TMyDBGrid(DBGrid1).Row - номер строки в гриде

а вот что может понадобится
DBGrid1.SelectedRows
(если делать то уж делать с возможностью граппу записей выделять)


radiant09   (2004-09-09 22:57:00) [3]

Ясный красный ) Мне вот интересно можно ли определить на какой записи стоит курсор, может через высоту ячеек и прочее, но что делать если там вертикальный scroll и т.д.?
  По другому то, конечно, можно, но больно неказисто на вид получится и вдобавок мне почему-то вперлось что я где-то похожее видел...


Zacho   (2004-09-09 22:49:00) [4]

Если такое действительно нужно (в чём я крайне сомневаюсь), то сделай это отдельно, (отедльная кнопка, пункт в меню и т.п.) например с помощью TListBox или ещё как-нибудь.
Imho, повторюсь, drag'n'drop в гриде в данном случае скорее вреден.
P.S. Думаю, что ты это знаешь, но на всякий случай напомню:
В TDBGrid данных нет, они есть в соответствующем TDataSet


radiant09   (2004-09-09 22:35:00) [5]

и по чему сортировать? мне нужно просто переставить пункты в определенном порядке, в базе то я поменяю нумерацию, а как это на экране сделать? при drag&drop там только координаты мыши есть, а вот как определить перед какой записью я отпустил перетаскиваемый пункт вот в чем вопрос?
  я не представляю как это можно сделать, и можно ли в принципе, может кто-нибудь знает как...


megabyte   (2004-09-09 22:26:00) [6]

Ну м.б. тебе нужна различная сортировка и фильтрация. Там имеет место перестановка записей и полей.


radiant09   (2004-09-09 22:10:00) [7]

имеется утвержденнаяформа отчетности, которая содержит наименование, код сведений, дальше идут графы, заполняемые пользователем. смысл в том, что это форма отчетности иногда меняеется, т.е. могут добавлятся, удаляться к-л пункты и менятся местами. чтобы не вносить изменения в программу или шаблон надо сделать механизм создания документа для пользователя.


Zacho   (2004-09-09 21:54:00) [8]

1.Imho в гриде это нафиг не нужно и даже вредно.
2. Возможно, я просто не понял, нормально опиши задачу.


Наверх

Титульная страница Поиск, карта сайта Написать письмо