РуководстваОснова Falcon SpaceОсновные компонентыВозможностиКоммуникация пользователейДизайн, стилизация, юзабилитиЛендингиУниверсальный APIИнтеграцииКаталогиНавигацияДокументыДополнительные компонентыПродвижение, SEOСистемные моментыСистемное администрированиеHOWTOТаблицыФормыПоля формыЗагрузка файлов, картинокHOWTO SQLHOWTO JSHOWTO ВерсткаРешение проблем
Выгода от использования Falcon Space
В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Как сделать сортировку дерева с Drag-and-Drop
Пример дерева с возможностью сортировки
Вы можете использовать для этого специальное поле формы вида treeOrder (Сортировка дерева).
В процедуре dict для данного столбца прописываем элементы дерева:
CREATE PROCEDURE [dbo].[fm_tst-form-order_f2_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
Прописываем процедуру saveField
CREATE PROCEDURE [dbo].[fm_tst-form-order_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='f2') begin
declare @formItemID nvarchar(128) = '', @elementID int = 0, @parentId int = 0, @ord int =0, @temp nvarchar(256)='', @index int
set @elementID = try_cast(dbo.str_splitPart(@value, ',',1) as int)
set @temp = dbo.str_splitPart(@value,',',2)
set @parentId = try_cast(dbo.str_splitPart(@temp, ',',1) as int)
set @ord = try_cast(dbo.str_splitPart(@temp, ',',2) as int)
set @temp = cast(@parentId + @ord + @elementID as nvarchar)
exec as_print @str = @temp
update tst_categories
set parentID = nullif(@parentId, 0), 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
set @index = 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
--admin 04.11.2020 10:52:48
Примечание:
- лучше придерживаться такого порядка обработки в сохранении сортировки (а также сортировать по 2 полям - ord, id).
Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Google поиск по нашей документации
Нужна бесплатная консультация?
Планируете делать веб-проект?
- Шаг 1. Создать концепт проекта
- Шаг 2. Получить оценку бюджета (КП)
- Шаг 3. Заключить договор
- Шаг 4. Создать совместно техническое задание
- Шаг 5. Поэтапная реализация проекта