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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.03.2012, 12:58   #1  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
событие выделения строк в grid
Здравствуйте, господа.

Не подскажет ли кто, есть ли возможность отследить в коде событие маркирования пользователем строк. Имеется ввиду кнопки слева и выделение - всё.

С уважением, Дмитрий.
Изображения
 
Старый 16.03.2012, 13:05   #2  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
Попробуйте перекрыть метод markChanged() на датасорсе.
Он, вроде, как раз и сообщает об изменениях вот этой части контрола.
__________________
If it ain't broke, take it apart and find out why (с)
Старый 16.03.2012, 13:17   #3  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Большое спасибо, Александр!

А есть ли возможность определить каккая именно кнопка была нажата. Все или конкретная запись?

С уважением, Дмитрий.

Последний раз редактировалось DmitryK; 16.03.2012 в 13:48.
Старый 16.03.2012, 14:44   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от DmitryK Посмотреть сообщение
Не подскажет ли кто, есть ли возможность отследить в коде событие маркирования пользователем строк. Имеется ввиду кнопки слева и выделение - всё.
Если Вам надо просто обработать выделенные строки - то просто воспользуйтесь методом anymarked():

X++:
FormDataSource formDS;
Common     cursor;
;
formDS = youTable_ds;
if (formDS.anymarked())
{
     
     for (cursor = formDS.getFirst(1); cursor; cursor = formDS.getNext())
     {
           myMethodProcess (cursor);
     }
}
else
{
      myMethodProcess(formDS.cursor());
}
Здесь, myMethodProcess - ваш метод, обрабатывающий текущую передаваемую ему запись в таблице.
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 16.03.2012, 15:06   #5  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от DmitryK Посмотреть сообщение
А есть ли возможность определить каккая именно кнопка была нажата. Все или конкретная запись?
formDS.defaultMark()
Старый 16.03.2012, 16:43   #6  
DmitryK is offline
DmitryK
Участник
 
179 / 76 (3) ++++
Регистрация: 22.12.2011
Спасибо за пример кода. В общем, для проверки маркирования я нечто подобное и использовал (ds.getFirst(1)). Интересно было определить именно маркирование <все>. За подсказку БОЛЬШОЕ спасибо Сергею.

С уважением, Дмитрий.

Последний раз редактировалось DmitryK; 16.03.2012 в 16:46.
Старый 23.05.2012, 15:58   #7  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Здравствуйте! Я хотел бы задать уточняющий вопрос.
Правильно ли я понимаю, что метод FormDataSource.defaultMark() должен срабатывать как событие при нажатии пользователем кнопки в гриде в левом верхнем углу?
Просто у меня почему-то ни в 4.0, ни в 3.0 не срабатывает
Старый 23.05.2012, 16:28   #8  
Alexanderis.ua is offline
Alexanderis.ua
Участник
 
53 / 40 (2) +++
Регистрация: 25.12.2008
Адрес: Киев, Украина
Это скорее свойство
Т.е. перекрываете markChanged(), а внутри проверяете
X++:
if (FormDataSource.anyMarked())
{
    if (FormDataSource.defaultMark())
    {
        // выбрано все
    }
    else
    {
        // выбрана конкретная запись
    }     
}
__________________
If it ain't broke, take it apart and find out why (с)

Последний раз редактировалось Alexanderis.ua; 23.05.2012 в 16:30.
Старый 23.05.2012, 16:39   #9  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Спасибо, но markChanged(), к сожалению, появилось только в 2009, а в 4.0 его нет.

В MSDN про defaultMark() написано: "This method is executed when a user clicks the top-left corner in a grid control to select all the records that are in the grid."
По идее должно быть как событие...

Последний раз редактировалось PMS; 23.05.2012 в 16:41.
Старый 24.05.2012, 07:56   #10  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от PMS Посмотреть сообщение
ни в 4.0, ни в 3.0 не срабатывает
в AX2009 тоже не срабатывает

Есть подозрение, что этот баг связан с тем, что для вызова этого метода система внутри себя использует ссылку не на FormDataSource, а на его базовый класс FormObjectSet. Который почему-то иногда забывает что его методы могут быть перекрыты на форме. Вопрос по InventJournalTrans_ds.getNext()

Конечно от этого ни холодно, ни жарко. Но есть надежда что в AX2012 заработает

Последний раз редактировалось S.Kuskov; 24.05.2012 в 07:59.
Старый 24.05.2012, 11:28   #11  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
S.Kuskov, спасибо за развернутый ответ!

Может быть тогда есть какие-то другие возможности отловить событие выбора всех записей в гриде вышеуказанным способом?
Старый 24.05.2012, 12:14   #12  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Вам для чего это нужно? Что хотите получить на выходе?
Старый 24.05.2012, 12:31   #13  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Но есть надежда что в AX2012 заработает
У меня в AX2012 тоже не работает.
За это сообщение автора поблагодарили: S.Kuskov (1).
Старый 24.05.2012, 13:12   #14  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от DmitryK Посмотреть сообщение
Здравствуйте, господа.

Не подскажет ли кто, есть ли возможность отследить в коде событие маркирования пользователем строк. Имеется ввиду кнопки слева и выделение - всё.

С уважением, Дмитрий.
Посмотрите класс FormDataSourceMarks (http://msdn.microsoft.com/en-us/libr...urcemarks.aspx)

X++:
formDataSourceMarks = FormDataSourceMarks::construct(); 
formDataSourceMarks.parmFormDataSource(formDataSource); 
formDataSourceMarks. getMarksFromDataSource();
Я бы попробовал в этом направлении

Последний раз редактировалось kornix; 24.05.2012 в 13:23.
Старый 24.05.2012, 13:40   #15  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от Sada Посмотреть сообщение
Вам для чего это нужно? Что хотите получить на выходе?
Мне нужно посчитать сколько строчек выделил пользователь на форме. Выделять их он может разными способами Ctrl+мышь, Ctrl+A, и в том числе кнопкой в гриде.
Старый 24.05.2012, 13:48   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от PMS Посмотреть сообщение
Мне нужно посчитать сколько строчек выделил пользователь на форме. Выделять их он может разными способами Ctrl+мышь, Ctrl+A, и в том числе кнопкой в гриде.
У меня есть решение Не пожете обработать событие - предотвратите его. Запретите выделение "кнопкой в гриде". Если поставить ShowRowLabels = No, то вместе с "заголовками" строк исчезнет и эта самая кнопка в верхнем левом углу грида. Нет кнопки - нет проблемы .
Старый 24.05.2012, 14:01   #17  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
У меня есть решение Не пожете обработать событие - предотвратите его. Запретите выделение "кнопкой в гриде". Если поставить ShowRowLabels = No, то вместе с "заголовками" строк исчезнет и эта самая кнопка в верхнем левом углу грида. Нет кнопки - нет проблемы .
Вот только Ctrl+A никто не отменял
__________________
Axapta v.3.0 sp5 kr2
Старый 24.05.2012, 14:06   #18  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Нет кнопки - нет проблемы .
Это, конечно, выход

Ctrl+A хорошо перехватывается в task() формы, с ним всё в порядке.
Старый 24.05.2012, 14:18   #19  
PMS is offline
PMS
Участник
 
54 / 29 (1) +++
Регистрация: 25.02.2005
Адрес: Санкт-Петербург
Цитата:
Сообщение от kornix Посмотреть сообщение
Посмотрите класс FormDataSourceMarks
Он опять же, к сожалению, появился в Ax2012, а у меня Ax 4.0.
Старый 24.05.2012, 14:20   #20  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Цитата:
Сообщение от PMS Посмотреть сообщение
Он опять же, к сожалению, появился в Ax2012, а у меня Ax 4.0.
Он есть в 4-ке
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Что попадает в буфер обмена при стандартном копировании строк grid'а? Gustav DAX: Программирование 6 03.03.2013 11:06
Grid+Ctrl+MouseDown как поймать событие ? AxTimur DAX: Программирование 4 25.02.2010 19:07
подсчет строк у несколких таблиц и вывод на grid braathe DAX: Программирование 1 23.03.2005 16:05
как подсчитать кол-во строк в Grid'е ? Omeo DAX: Программирование 13 26.03.2004 18:50
Раскраска строк в Grid'е Андре DAX: Программирование 3 14.10.2002 16:05

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

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

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