|
Перетаскивание строк в дереве (как поменять поведение элементов) | ☑ | ||
---|---|---|---|---|
0
AndrewM
30.11.17
✎
16:41
|
Уважаемые знатоки!
Как заставить строку дерева встать в подчинение под другую строку? Дано: на управляемой форме есть дерево. Когда я перетаскиваю строку из одного уровня вложенности в строку с другим уровнем либо в соседнюю ветку, тогда переносимая строка встаёт под выбранного родителя. Скрин 1 (всё норм): http://polariton.ad-l.ink/85Zy4m7GF/image.png Но когда я тяну строку в соседнюю, у которой тот же уровень вложенности, она не заходит в подчинение к строке, а встаёт рядом, то есть работает просто как перемещение строки. Скрин 2 (не норм, хочу по-другому): http://meson.ad-l.ink/8mYFtG75s/image.png Вопрос: как сделать так, чтобы строка заходила в подчинение к строке, даже если у них одинаковый уровень вложенности? То есть чтобы в "Скрин 2" было также, как в "Скрин 1". В обработчиках При/ПриОкончании Перетаскивания не вижу в параметрах строку назначения, куда тянется строка. В параметрах обработчиков хранится только сама перетаскиваемая строка. |
|||
1
DmitrO
30.11.17
✎
16:49
|
В событии Перетаскивание в параметрах есть и Строка и Поле.
|
|||
2
AndrewM
04.12.17
✎
11:12
|
(1) Забыл написать ответ. Вот что получилось:
Спасибо за наводку. Сделал через поиск по идентификатору. Только переносить строку к другому родителю приходится на сервере, что не очень удобно, т.к. приходится выгружать/загружать дерево, а из-за этого пользователь видит, что обновилась вся таб.часть и что курсор встаёт на первую строку, что немного напрягает, если строк много. <code> &НаКлиенте Процедура Расш1_деревоСоставПеретаскиваниеВместо(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) лТекЭлемент = Элемент.ТекущиеДанные; лКлючиПереносимыхСтрок = Новый Массив; Для Каждого лЭлемент Из ПараметрыПеретаскивания.Значение Цикл лПереносимаяСтрока = деревоСостав.НайтиПоИдентификатору(лЭлемент); лКлючиПереносимыхСтрок.Добавить(лПереносимаяСтрока.КлючСвязи); КонецЦикла; лНазначение = деревоСостав.НайтиПоИдентификатору(Строка); Если лНазначение <> Неопределено Тогда лРодительНазначения = лНазначение.ПолучитьРодителя(); лРодительТекущий = лТекЭлемент.ПолучитьРодителя(); Если лРодительТекущий = лРодительНазначения Тогда СтандартнаяОбработка = Ложь; ИзменитьРодителя(лКлючиПереносимыхСтрок, лНазначение.КлючСвязи); ПоказатьУровеньДерева(уровеньРазвертки); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Процедура ИзменитьРодителя(лКлючиПереносимыхСтрок, лКлючРодителя) лДерево = РеквизитФормыВЗначение("деревоСостав"); Для Каждого лКлючСвязи Из лКлючиПереносимыхСтрок Цикл лСтрокаТекущая = лДерево.Строки.Найти(лКлючСвязи, "КлючСвязи", Истина); лСтрокаРодителя = лДерево.Строки.Найти(лКлючРодителя, "КлючСвязи", Истина); Если лСтрокаТекущая <> Неопределено И лСтрокаРодителя <> Неопределено Тогда ДобавитьНовуюВеткуРодителю(лСтрокаРодителя, лСтрокаТекущая); лСтрокаТекущая.Родитель.Строки.Удалить(лСтрокаТекущая); КонецЕсли; КонецЦикла; ЗначениеВРеквизитФормы(лДерево, "деревоСостав"); КонецПроцедуры </code> |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |