AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.03.2021, 12:12   #1  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Игрища с позиционированием выделенной записи среди видимых строк grid'а
Коллеги , может кто занимался подобным и сможет подсказать что дельное ...

Ситуация - есть grid с определенной видимой выделенной строкой, на источнике данных которого запускается обновление набора данных через research() и восстановление выделенной позиции через FindValue()/FindRecord().

В случаях, когда перед таким обновлением и восстановлением выделенной позиции :
а) выделенная позиция имела, скажем так, порядковый номер в выводимом наборе данных, не превышающий кол-во видимых строк в grid
б,) выделенная позиция имела порядковый номер в выводимом наборе данных, превышающий кол-во видимых строк в grid, но среди видимых строк grid'а стояла на последнем месте
то после обновления состояние выделения в grid и место выделенной позиции среди видимых строк grid'а не меняется.

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

Можно ли как-то перед таким обновлением считать у выделенной позиции ее текущее положение среди видимых на гриде строк и после обновления, если положение изменилось, вернуть его в первоначальное состояние (доскроллировать grid на нужное кол-во строк вниз) ?

У источника данных все "позиционные" методы касаются именно позиции выделения в наборе данных и к позиции среди видимых строк на grid'е не имеет отношения, на методах grid'а тоже ничего нарыть не смог и в поиске по форуму не удалось ничего нарыть
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 12.03.2021 в 12:14.
Старый 12.03.2021, 12:46   #2  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
У research параметр есть retainPosision
по умолчанию false

НО!
сама постановка - восстанавливать позицию мне кажется чертовски запоутывающей пользователя.
пользователю скорее нужно "остаться на той же самой записи, но возможно в другой позиции",
а не в "той же самой позиции, но возможно на другой записи"

насколько я помню, research(true) оставит курсор как раз на записи с тем же самым recId.
но это не точно

в любом случае, мне кажется, что НЕ нужно привязываться ни к позиции в курсоре, ни тем более к позиции в гриде.
__________________
полезное на axForum, github, vk, coub.
Старый 12.03.2021, 13:54   #3  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от mazzy Посмотреть сообщение
а не в "той же самой позиции, но возможно на другой записи"
А этого никому и не надо.
Надо именно на той же выделенной записи и чтобы эта выделенная запись не "прыгала" по гриду в части своей позиции среди видимых после обновления.

Цитата:
Сообщение от mazzy Посмотреть сообщение
сама постановка - восстанавливать позицию мне кажется чертовски запоутывающей пользователя.
Но не в данном случае ...
Немного уточню решаемый предмет- данный вопрос возник в финале реализации с помощью grid не особо "любимого" Вами "дерева", по сути - косметическая "рюшечка", не особо портящая результат.

Возникает данный вопрос при свертке/развертке узловой записи - хотелось бы после обновления набора данных, связанного с отрисовкой добавляемых/ скрываемых подчиненных позиций, лежащих ниже выделенного узла, чтобы сам узел не менял своего положения среди видимых строк грида (см.. вложение)

Конечно же, даже сам оригинальный FromTreeControl грешен всяким в части прыжков выделенной позиции среди видимых элементов(при развертывании приыгает вверх, при свертке - вниз), но хотелось добиться более "спокойного" поведения
Вложения
Тип файла: zip видимофайл.zip (760.0 Кб, 165 просмотров)
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 12.03.2021 в 13:57.
Старый 12.03.2021, 14:20   #4  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,952 / 3230 (115) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Насколько я помню, retainPosision не гарантирует что это будет та же запись. Если после выполнения запроса изменилась выборка то запись может быть другой.

Если нужно гарантировать что та же запись будет, то я делал в 2009-й некий финт.
Выставлял сортировку по какому-то уникальному полю (RecId или другой ключ)
Ставил нужное значение в element.args().lookupField и element.args().lookupValue - по уникальному полю для которого поставили сортировку.
Делал research

Позиционирование работало быстро.
Дальше можно вернуть оригинальные значения у измененных параметров.
В 2012-й можно попробовать поиграть с lookupRecord() - я сам не пробовал.
За это сообщение автора поблагодарили: mazzy (2), sukhanchik (3).
Старый 12.03.2021, 14:57   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Немного уточню решаемый предмет- данный вопрос возник в финале реализации с помощью grid не особо "любимого" Вами "дерева", по сути - косметическая "рюшечка", не особо портящая результат.

Возникает данный вопрос при свертке/развертке узловой записи - хотелось бы после обновления набора данных, связанного с отрисовкой добавляемых/ скрываемых подчиненных позиций, лежащих ниже выделенного узла, чтобы сам узел не менял своего положения среди видимых строк грида (см.. вложение)
закат солнца вручную
поэтому и не особо любим лично мной.

а если набор данных изменился в другой аксапте.
то узел тоже не должен менять своего положения?

предположим, нет аксапты.
есть только ручка, бумага и воображаемый набор на десяток элементов.
как ваша хотелка должна работать?
__________________
полезное на axForum, github, vk, coub.
Старый 15.03.2021, 07:32   #6  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от mazzy Посмотреть сообщение
а если набор данных изменился в другой аксапте.
то узел тоже не должен менять своего положения?
Если изменился настолько, что на новом наборе данных восстановить картину до обновления невозможно - пожалуйста, тут без вопросов..


Цитата:
Сообщение от mazzy Посмотреть сообщение
предположим, нет аксапты.
есть только ручка, бумага и воображаемый набор на десяток элементов.
как ваша хотелка должна работать?
Хорошо, давайте на пальцах ...
Допустим , что есть для воображаемого набора воображаемый grid c 5 видимыми строками для вывода элементов. На гриде в текущий момент видны элементы, начиная с 5-го ( 5, 6, 7, 8, 9).и выделение текущей позиции стоит на 6-ом (2-й среди видимых на grid). Я раскрываю 6-й элемент (lдопустим , у него 2 подчиненных) . и хочу увидеть следующую картину видимых на grid элементов после обновления - 5, 6, 6.1, 6.2, 7 с выделением на 6-ом (т.е. точно так же выделение остается на той же записи и эта запись имеет ту же самую позицию среди видимых на grid)

Что получается при вызове research()/FindValue() ?
research() обновит набор данных (станет 1, 2, 3, 4, 5, 6, 6.1, 6.2, 7, 8, 9, 10) отобразит на grid набор видимых строк с 1 по 5.с выделением на 1-ом.
FindValue() переместит выделение на элемент 6 и изменит набор видимых строки в grid со 2-го по 6-й.(скроллирует grid, пока не найдет искомую запись, которая оказывается последней среди видимых на grid ) - что несколько отличается от желаемой картины и визуально воспринимается как "прыжок".выделенной позиции и всех вышерасположенных данных вниз по grid'у.

Как исправить такое - попытаться доскроллировать на нужное кол-во шагов сам grid после FindValue() так, чтобы выделенная запись обрела среди видимых ту же самую позицию, что и до обновления.
Именно по реализации этого и есть вопрос - есть ли какие средства, позволяющие считывать и управлять позицией среди видимых строк для выделенной записи на grid
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 15.03.2021, 08:19   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Хорошо, давайте на пальцах ...
...
Что получается при вызове research()/FindValue() ?
не-не-не.
пока в рассматриваемом случае не будет вводной "другая аксапта изменяет набор данных" рассматривать бессмысленно.

промоделируйте на пальцах что должно происходить, если набор изменился. куда и как нужно позиционировать и как сохранять позицию.

если поведение измененного и неизмененного наборов будет отличаться, то зачем это нужно? ведь для пользователь не знает об изменениях и для пользователя все равно позиция будет иногда прыгать.
__________________
полезное на axForum, github, vk, coub.
Старый 15.03.2021, 09:22   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Дабы вернуть дискуссию в конструктивное русло предположим что набор данных статичен и не подвержен изменению ни со стороны других пользователей ни со стороны текущего пользователя. Я думаю это вполне возможный сценарий

Нет, не то чтобы я ратовал за подобные извращения над пользовательским интерфейсом.
Да, здесь больше спортивный интерес и чисто программистский подход.

Еще раз про управление скролом в window
Закрепление полей grid при прокрутке
Старый 15.03.2021, 09:36   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Дабы вернуть дискуссию в конструктивное русло предположим что набор данных статичен и не подвержен изменению ни со стороны других пользователей ни со стороны текущего пользователя. Я думаю это вполне возможный сценарий
я не уверен, что такое предположение вернет в конструктивное русло - делать контрол только для статического набора в ERP-системе... м...

но в качестве спортивной разминки - почему бы и нет?
https://coub.com/view/1ione
__________________
полезное на axForum, github, vk, coub.

Последний раз редактировалось mazzy; 15.03.2021 в 09:38.
Старый 15.03.2021, 13:40   #10  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
S.Kuskov, спасибо за ссылки, но там работа идет с абсолютной позицией скроллирования внутри контрола и тут mazzy будет прав - при стороннем изменении данных восстановление абсолютной позиции скроллирования после обновления данных на grid может дать совершенно кривой и дикий результат..
Я потому и пытаюсь разобраться - есть/нет возможность определения позиции текущего выделения на grid именно среди видимых строк. Если найдется таковая - задача решаема (если после обновления и восстановления выделения позиция среди видимых у выделения больше, чем до обновления - скроллируем grid на определенное кол-во шагов вниз) . Если нет - ладно, заказчик и так доволен будет...
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: mazzy (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Изменение порядка строк в GRID. Как сделать кнопку для перемещения строки? alexander.PK-RAZIONAL DAX: Программирование 1 13.01.2017 11:33
Что попадает в буфер обмена при стандартном копировании строк grid'а? Gustav DAX: Программирование 6 03.03.2013 11:06
Количество строк в Grid Eland DAX: Программирование 3 10.11.2006 15:03
Кол-во выделенных строк в Grid Bigzone DAX: Программирование 3 19.10.2006 12:47
Как пометить на grid_е несколько строк ? Eland DAX: Программирование 9 05.10.2006 11:27

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:02.