07.01.2010, 12:02 | #1 |
Участник
|
Закрепление полей grid при прокрутке
В excel есть замечательная возможность закрепление областей, т. е. при горизонтальной прокрутке данных в grid первые несколько полей остаются на месте.
Возможно ли такое реализовать в аксапте? Есть вариант сделать 2 гриды рядом, но в этом случае, если прокрутить одну из грид по вертикали, и спозицинировать на любой записи, выделенная запись в 2 гридах будет на разной высоте.
__________________
И почему никто меня не любит? Да, я надоедливый |
|
07.01.2010, 12:20 | #2 |
Участник
|
Можно добавить на форму ActiveX компонент рабочего листа Excel - вуаля, поддержка закрепления области появляется автоматом.
Сделать это на гриде АХ врядли можно. |
|
07.01.2010, 13:53 | #3 |
Участник
|
Если у обоих гридов одинаковый датасорс, то они должны прокручиваться синхронно. Нет сейчас под рукой Аксапты чтоб посмотреть, но вроде должно быть так. Проверьте сами, это ж на пару минут работы.
|
|
07.01.2010, 16:20 | #4 |
Moderator
|
Как раз недавно при поиске попадалась похожая тема.
Прикреплю ссылку до кучи: Grid с фиксацией части колонок при скроллинге. |
|
11.01.2010, 07:07 | #5 |
Участник
|
Цитата:
Был вариант выводить в label строки, но это будет не совсем удобно
__________________
И почему никто меня не любит? Да, я надоедливый |
|
27.12.2010, 10:27 | #6 |
Участник
|
Синхронизация двух гридов
Подниму ка я в очередной раз давнюю тему синхронизации двух гридов.
Итак, имеем два грида связанных с одним источником данных. Общий источник данных обеспечивает синхронность выделения соответствующих строк, но не гарантирует сохранение взаимного расположения выделенных строк друг на против друга. Т.е. синхронизация данных есть (а это на мой взгляд самое главное), не хватает всего лишь синхронизации их отображения. Для этого достаточно отловить событие прокрутки одного грида и в нём прокрутить второй грид. что может быть проще . Тут у меня возникли непонятные трудности с перехватом события #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); } P.S.: Делал на AX2009 |
|
|
За это сообщение автора поблагодарили: Ace of Database (3). |
27.12.2010, 16:40 | #7 |
Участник
|
Вспомнил я тут кое-что. Давным-давно участвовал в разработке одной системы, тогда еще с текстовым (в смысле не графическим) интерфейсом. Штатного средства закрепления области в гридах тоже не было. Выкручивались так:
1) делалось, чтобы прокрутка вбок была возможна только целыми колонками, где-то по одной колонке, а где-то по нескольку сразу, например по N 2) "закрепляемая" область тупо дублировалась в этом гриде через каждые N колонок. При прокрутке у пользователя создавался полный эффект, что область из нескольких колонок слева закреплена. |
|
27.12.2010, 16:56 | #8 |
Участник
|
Zabr, это уже совсем что-то жестокое. Славо богу в аксапте два рядом стоящих грида полностью решают этот вопрос.
|
|
14.04.2011, 17:14 | #9 |
Участник
|
Цитата:
Сообщение от 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); } P.S.: Делал на AX2009 А удалось ли победить отказ прокрутки, при достижении неконтролируемым гридом конца? |
|
14.04.2011, 19:01 | #10 |
Участник
|
|
|
24.04.2011, 22:00 | #11 |
Участник
|
Два грида, один источник данных, на втором стрелку скрола листаем вниз, при подходе к краю сетка продолжает листаться, но в этот момент перестает листаться первый грид (который двигается кодом). Перестают листать то ли после того как показали свободное пространство в гриде на одну строку, то ли на две.
|
|
17.08.2012, 10:14 | #12 |
Участник
|
Коллеги, ни у кого каких-нибудь новых идей не возникло?
__________________
-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их. |
|
18.02.2013, 13:11 | #13 |
Участник
|
Та же задача...
|
|