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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.01.2010, 12:02   #1  
Antant is offline
Antant
Участник
 
82 / 17 (1) ++
Регистрация: 03.12.2005
? Закрепление полей grid при прокрутке
В excel есть замечательная возможность закрепление областей, т. е. при горизонтальной прокрутке данных в grid первые несколько полей остаются на месте.

Возможно ли такое реализовать в аксапте? Есть вариант сделать 2 гриды рядом, но в этом случае, если прокрутить одну из грид по вертикали, и спозицинировать на любой записи, выделенная запись в 2 гридах будет на разной высоте.
__________________
И почему никто меня не любит?
Да, я надоедливый
Старый 07.01.2010, 12:20   #2  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Можно добавить на форму ActiveX компонент рабочего листа Excel - вуаля, поддержка закрепления области появляется автоматом.

Сделать это на гриде АХ врядли можно.
Старый 07.01.2010, 13:53   #3  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Antant Посмотреть сообщение
если прокрутить одну из грид по вертикали, и спозицинировать на любой записи, выделенная запись в 2 гридах будет на разной высоте.
Если у обоих гридов одинаковый датасорс, то они должны прокручиваться синхронно. Нет сейчас под рукой Аксапты чтоб посмотреть, но вроде должно быть так. Проверьте сами, это ж на пару минут работы.
Старый 07.01.2010, 16:20   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Как раз недавно при поиске попадалась похожая тема.
Прикреплю ссылку до кучи: Grid с фиксацией части колонок при скроллинге.
Старый 11.01.2010, 07:07   #5  
Antant is offline
Antant
Участник
 
82 / 17 (1) ++
Регистрация: 03.12.2005
Цитата:
Сообщение от Zabr Посмотреть сообщение
Если у обоих гридов одинаковый датасорс, то они должны прокручиваться синхронно. Нет сейчас под рукой Аксапты чтоб посмотреть, но вроде должно быть так. Проверьте сами, это ж на пару минут работы.
Я проверял, поэтому и пишу...
Был вариант выводить в label строки, но это будет не совсем удобно
__________________
И почему никто меня не любит?
Да, я надоедливый
Старый 27.12.2010, 10:27   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Синхронизация двух гридов
Подниму ка я в очередной раз давнюю тему синхронизации двух гридов.
Итак, имеем два грида связанных с одним источником данных. Общий источник данных обеспечивает синхронность выделения соответствующих строк, но не гарантирует сохранение взаимного расположения выделенных строк друг на против друга. Т.е. синхронизация данных есть (а это на мой взгляд самое главное), не хватает всего лишь синхронизации их отображения. Для этого достаточно отловить событие прокрутки одного грида и в нём прокрутить второй грид. что может быть проще . Тут у меня возникли непонятные трудности с перехватом события #WM_VSCROLL при помощи formRun.installMessageProc(). Пока сделал синхронизацию через таймер.
X++:
void timer()
{
    #WinAPI
    int NewPos = WinAPI::getScrollPos(Grid1.hWnd(), #SB_VERT);
    ;

    if (NewPos != pos)
    {
        pos = NewPos;

        WinAPI::setScrollPos(Grid2.hWnd(), #SB_VERT, pos, true);
        WinAPI::sendMessageEx(Grid2.hWnd(), #WM_VSCROLL, (pos << 16) | #SB_THUMBTRACK, 0);
        WinAPI::sendMessageEx(Grid2.hWnd(), #WM_VSCROLL, (pos << 16) | #SB_THUMBPOSITION, 0);
    }

    this.setTimeOut(identifierstr(timer), #delay, false);
}
Если кто подскажет как можно поймать #WM_VSCROLL, буду очень признателен.

P.S.: Делал на AX2009
За это сообщение автора поблагодарили: Ace of Database (3).
Старый 27.12.2010, 16:40   #7  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Вспомнил я тут кое-что. Давным-давно участвовал в разработке одной системы, тогда еще с текстовым (в смысле не графическим) интерфейсом. Штатного средства закрепления области в гридах тоже не было. Выкручивались так:
1) делалось, чтобы прокрутка вбок была возможна только целыми колонками, где-то по одной колонке, а где-то по нескольку сразу, например по N
2) "закрепляемая" область тупо дублировалась в этом гриде через каждые N колонок. При прокрутке у пользователя создавался полный эффект, что область из нескольких колонок слева закреплена.
Старый 27.12.2010, 16:56   #8  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Zabr, это уже совсем что-то жестокое. Славо богу в аксапте два рядом стоящих грида полностью решают этот вопрос.
Старый 14.04.2011, 17:14   #9  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Подниму ка я в очередной раз давнюю тему синхронизации двух гридов.
Итак, имеем два грида связанных с одним источником данных. Общий источник данных обеспечивает синхронность выделения соответствующих строк, но не гарантирует сохранение взаимного расположения выделенных строк друг на против друга. Т.е. синхронизация данных есть (а это на мой взгляд самое главное), не хватает всего лишь синхронизации их отображения. Для этого достаточно отловить событие прокрутки одного грида и в нём прокрутить второй грид. что может быть проще . Тут у меня возникли непонятные трудности с перехватом события #WM_VSCROLL при помощи formRun.installMessageProc(). Пока сделал синхронизацию через таймер.
X++:
void timer()
{
    #WinAPI
    int NewPos = WinAPI::getScrollPos(Grid1.hWnd(), #SB_VERT);
    ;

    if (NewPos != pos)
    {
        pos = NewPos;

        WinAPI::setScrollPos(Grid2.hWnd(), #SB_VERT, pos, true);
        WinAPI::sendMessageEx(Grid2.hWnd(), #WM_VSCROLL, (pos << 16) | #SB_THUMBTRACK, 0);
        WinAPI::sendMessageEx(Grid2.hWnd(), #WM_VSCROLL, (pos << 16) | #SB_THUMBPOSITION, 0);
    }

    this.setTimeOut(identifierstr(timer), #delay, false);
}
Если кто подскажет как можно поймать #WM_VSCROLL, буду очень признателен.

P.S.: Делал на AX2009

А удалось ли победить отказ прокрутки, при достижении неконтролируемым гридом конца?
Старый 14.04.2011, 19:01   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от uchenik Посмотреть сообщение
А удалось ли победить отказ прокрутки, при достижении неконтролируемым гридом конца?
Не понял вопроса. У себя я вродебы никаких проблем не замечал. Может плохо искал? Опишите подробнее, что и в какой момент происходит не так.
Старый 24.04.2011, 22:00   #11  
uchenik is offline
uchenik
Участник
 
119 / 20 (1) +++
Регистрация: 15.12.2008
Два грида, один источник данных, на втором стрелку скрола листаем вниз, при подходе к краю сетка продолжает листаться, но в этот момент перестает листаться первый грид (который двигается кодом). Перестают листать то ли после того как показали свободное пространство в гриде на одну строку, то ли на две.
Старый 17.08.2012, 10:14   #12  
Pustik is offline
Pustik
Участник
 
807 / 372 (14) ++++++
Регистрация: 04.06.2004
Коллеги, ни у кого каких-нибудь новых идей не возникло?
__________________
-Ты в гномиков веришь?
-Нет.
-А они в тебя верят, смотри, не подведи их.
Старый 18.02.2013, 13:11   #13  
user_ax is offline
user_ax
Участник
Аватар для user_ax
 
599 / 39 (3) +++
Регистрация: 07.10.2012
Адрес: ZP
Та же задача...
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Filter-by-Grid Blog bot DAX Blogs 2 30.05.2012 13:39
Dynamics AX: DAX 4.0 Filter by Grid [Update] Blog bot DAX Blogs 0 27.04.2007 17:10
Advanced programming: Grid data and view manipulations batiskaf_new DAX: Программирование 15 21.06.2006 11:44
Динамическая привязка полей в Grid Bars DAX: Программирование 1 22.11.2005 14:16
Объединить несколько полей таблицы в одном поле Grid-а на форме? storer DAX: Программирование 2 12.11.2003 14:08
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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