Управление иерархией дерева через Drag n Drop

В этом примере было реализовано управление иерархией дерева через Drag&Drop

Для этого мы:

  • создали форму и поле типа tree order
  • для поля задали словарь значений в fm_watch_ordertree_tree_dict
  • в SaveField формы сохраняем перемещение элемента и пересчет порядка других элементов
CREATE PROCEDURE [dbo].[fm_watch_ordertree_tree_dict]
   @username nvarchar(256), 
   @itemID nvarchar(128) 
AS
BEGIN
	select 	c.id Value, -- id
        	c.name as Text,    
        	isnull(c.parentID, 0) Value2  -- parentID
    from tst_categories c   
    order by ord, id
END
CREATE PROCEDURE [dbo].[fm_watch_ordertree_saveEditableField]
    @pk nvarchar(128),	    -- id for item
	@fieldCode nvarchar(64),    -- form field
	@value nvarchar(max),	  -- field value
	@username nvarchar(256)  -- current user
AS
BEGIN
	if @fieldCode='tree' begin
        --новые параметры элемента дерева
    	declare @elementID int=try_cast(dbo.str_splitPart(@value, ',',1) as int)
    	declare @temp nvarchar(256)=dbo.str_splitPart(@value,',',2)
    	declare @parentId int=try_cast(dbo.str_splitPart(@temp, ',',1) as int)
    	declare @ord int=try_cast(dbo.str_splitPart(@temp, ',',2) as int)
    
    	--сохраняем в таблицу
		update tst_categories set parentID=@parentId, ord=@ord where id=@elementID	
    
    	--отбираем все элементы того же родителя
    	declare @t table(id int,  ord int) 
    	insert into @t 
        select id, ord 
        from tst_categories 
        where isnull(parentID,0)=@parentId and id <>@elementID
    	order by ord,id
    
    	declare @index int=0
    	-- обновляем порядок у предыщущих (всех у кого номер меньше)
    	while @index<@ord-1 begin 
    		update tst_categories 
    		set ord=@index+1
    		where id in (select id from @t order by ord,id 
                         OFFSET @index ROWS FETCH NEXT 1 ROWS ONLY)
    		set @index=@index+1    
    	end
   
    	set @index = @ord
		declare @count int = (select count(id) from tst_categories where isnull(parentID, 0) = @parentId ) 
    	-- элементы после теущего 
    	while @index<@count begin 
    		update tst_categories 
    		set ord=@index+1+10000
    		where id in (select id from @t order by ord,id
                		 OFFSET @index-1 ROWS FETCH NEXT 1 ROWS ONLY) and id <>@elementID
    		set @index = @index + 1    
    	end
    
	    select 1 Result, '' Msg 
		return
	end 

	select 0 Result, 'Не найден код сущности' Msg 

END

Другие модули

Редактирование одиночных полей формы в личном кабинете

Кнопка очистки формы

Цвет фона формы. Как изменить фон формы на сайте

Сообщение-уведомление на сайте вместо показа формы (NoForm). Отображение сообщения о недоступности формы

Работа с буфером обмена на сайте. Как скопировать текст в буфер обмена

Обновление содержимого страницы сайта (Refresh container). Перезагрузка части страницы

Любой вид формы на сайте - гибкая разметка формы

Выбор адреса и координат с подгрузкой из Google Maps API

Последние обновления

SQL-инструмент для создания личных кабинетов на сайте

Суть подхода и история создания Falcon Space

Платформа Falcon Space

Это снижение стоимости владения

за счет меньшего количества людей для поддержки

Это быстрое внесение изменений

по ходу эксплуатации программы

Это современный интерфейс

полная адаптация под мобильные устройства