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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.06.2006, 14:41   #1  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Advanced programming: Grid data and view manipulations
Уважаемые гуру Аксапты. Надеюсь я вам не надоел еще со своими дурацкими вопросиками? Нет? У меня еще есть:
  1. Get\Set selected cell index ( int cell = Grid.SelectedItem(), int row = Grid.SelectedRow() )
  2. Scroll any cell to visible area (Grid.MakeVisibleCell( rowIndex, colIndex )
  3. Get the cell position and rectangle by cell index (RECT r = Grid.GetCellRect(row, col) )
  4. Set the cell to the input mode (Grid.ActivateCell( row, col) )
  5. Get the cell index by position (Grid.FindCell( xPoint, yPoint))
  6. Get & set cell value (Grid.Get\SetCellValue(row, col))
  7. Row & Column count
  8. row properties (header text, height, top)
  9. column properties (header text, width, left)
  10. Access to the inner list (if exist), get the items count, item value,
    like list items count, scroll item to the visible area, get the item location and rectangle, show popup list.
Заранее говорю, что учить все основательно у меня времени нет, можете дать только основные направления (взять в датасорсе маркнутые записи, в таком духе), если что то не понятно я спрошу дополнительно. Щедрую раздачу очков гарантирую!

Спасибо за понимание, Сергей.
Старый 20.06.2006, 15:38   #2  
MironovI is offline
MironovI
Участник
 
724 / 77 (4) ++++
Регистрация: 30.05.2005
Вы про адвансед всегда думаете на буржуйском, аля как программирую так и думаю? Спрошу за всех - не понял как все это к гридам Аксы относится - это ж не ехель, или я не понял сути?
Старый 20.06.2006, 16:40   #3  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Я бы посоветовал почитать сначала Developer's Guide.
Ну, если уж совсем нету времени (один вечер нужно, не больше), то откройте только раздел про создание форм - там очень доходчиво описаны возможности гридов.

По первому вопросу:
Перебор записей Form Data Source при множественном выборе

Используются методы dataSource getFirst, getNext - это не будет менять текущее положение курсора в гриде, если же использовать next, first() - то положение будет меняться соответственно.

по второму вопросу - метод findRecord() - нужно знать значение RecId той строки, на которую хотите перейти.
Позиционирование курсора на конкретной записи в Data Source на форме
(плюс заодно беседа о его производительности)

И вообще, посмотрите какие методы есть на датасорсе - можно сразу станет понятней, что он может, а что нет
За это сообщение автора поблагодарили: batiskaf_new (1).
Старый 20.06.2006, 16:59   #4  
db is offline
db
Роман Долгополов (RDOL)
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
 
393 / 692 (24) +++++++
Регистрация: 01.04.2004
Адрес: Москва
Вопрос

А эта Ваша суперпуперавтокнопомышководилка должна общаться с гридом посредством юзерского интерфейса или годятся способы манипулирования данными минуя непосредственно контрол грида?
Старый 20.06.2006, 17:07   #5  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Сочувствую. Grid в Аксапте отрисовывает себя целиком, отдельные ячейки окнами не являются, однако являются равноправными элементами формы Аксапта.
Старый 20.06.2006, 17:22   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
по-моему текущая редатируемая ячейка является окном
Старый 20.06.2006, 18:19   #7  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Цитата:
Сообщение от MironovI
Вы про адвансед всегда думаете на буржуйском, аля как программирую так и думаю? Спрошу за всех - не понял как все это к гридам Аксы относится - это ж не ехель, или я не понял сути?
Прабуржуйскойнифиганидапёр. Проще так мне тему в списке найти :-)
Старый 20.06.2006, 18:25   #8  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Цитата:
Сообщение от db
Вопрос

А эта Ваша суперпуперавтокнопомышководилка должна общаться с гридом посредством юзерского интерфейса или годятся способы манипулирования данными минуя непосредственно контрол грида?
Желательно, потому как многие гиу так написаны что только после манипуляций с клавой или мышкой происходит очередность событий, после чего контрол становится в правильное состояние, иногда установить значение поля ввода через функционал не достаточно, а вдруг у них на KeyPress какая то логика фильтрующая есть?

Функционалом прийдется пользоваться в любом случае, чтобы посчитать координаты, найти запись, а вот ввести значение нужно будет только физическими средствами.
Старый 21.06.2006, 00:17   #9  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
По-моему, вы просто неправильно подходите к программированию в Аксапте, забывая, что это уже не прикладное, а ERP-программирование.

Но, раз надо, разбирайтесь.
По поводу вызова контекстного меню - его можно динамически формировать, и открывать только на выбранных строках грида, но опять же, привязка будет идти не по номеру строки грида, потому что такого понятия нет в принципе, а по ключу или по RecId текущей строки. Вывод своего контекстного меню реализован в системе на различных формах, посмотрите,к примеру, ГК\Запросы\Оборот по счету\Шахматная ведомость оборотов по счетам (правда там используется не грид, но я такое же делал в гриде когда-то, если память не изменяет)

По поводу подсчета количества отображаемых строк - можно пойти двумя путями:
1. Перебрать все записи в гриде, используя датасорс.
2. Использовать запрос текущий формы (лучше для этого использовать именно queryRun.query(), а не просто query() датасорса, так как последний не учитывает фильтров, которые наложил пользователь на отображение данных). Так вот, по query можно построить объект класса QueryRun и загнать его в статический метод класса SysQuery - SysQuery::countTotal() - он вернет количество строк, которые вернет переданный в него запроса
- правда, при количестве датасорсов в запросе это все равно будет полный проход по всем строкам с увеличением счетчика, то есть особо в производительности вы не выиграете по сравнению с первым пунктом. (В случае одного датасорса получаем запрос с использованием агрегатной функции count())
Старый 21.06.2006, 10:10   #10  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Кашперук, я ERP программированием не занимаюсь, мне нужны самые общие параметры гридов, для того чтобы по общим параметрам написать автоматический тест, который потом после каждого изменения в вашей аппликации сможет протестировать функционал на наличие багов логики.
Старый 21.06.2006, 10:15   #11  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Вопрос. Как получить dataSource из Grid? Подчеркиваю, у меня есть только ссылка на гуи элемент FormGridControl, метод dataSource возвращает идентификатор, который не понятно куда дальше нужно запихивать чтобы получить ссылку на объект датасорс. У формы метод dataSource возвращает ссылку на объект (допустим что форму я получаю по Grid.owner().owner() и так далее, если есть проще способ получить форму то подскажите), но он требует имени датасорса, имя я могу узнать только в рантайме.
Старый 21.06.2006, 10:45   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Метод DataSource() грида возвращает id датасоурса на форме. Получить сам объект датасоурса можно, например так
X++:
    int i;
    ;
    for (i=1;i<=this.dataSourceCount();i++)
    {
        if (element.dataSource(i).id() == Grid.dataSource())
        {
            // element.dataSource(i) - это и есть нужный вам объект
            break;
        }
    }
Заодно в коде и ответ на ваш второй вопрос - идентификатор element указывает на объект FormRun формы
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 21.06.2006 в 10:51.
За это сообщение автора поблагодарили: batiskaf_new (1).
Старый 21.06.2006, 11:02   #13  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
ОК, я тоже думал про итерацию, если другого способа не предвидится, оказалось что таки не предвидится... Элемента у меня нет, я получаю ссылку на Grid в контексте инстанса другого класса, моего класса, даже не формы, просто класс Agent. Вобщем за неимением element прийдется пользоваться owner, я верно понимаю?
Старый 21.06.2006, 11:20   #14  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Кстати, а разве Grid.Owner() указывает не объект FormRun?
__________________
Axapta v.3.0 sp5 kr2
Старый 21.06.2006, 11:27   #15  
batiskaf_new is offline
batiskaf_new
Участник
 
39 / 19 (1) ++
Регистрация: 07.06.2006
Насколько я понимаю - не всегда, грид может лежать на табе, или другом контейнере. Вобщем понятно.
Старый 21.06.2006, 11:44   #16  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Не-а. Именно что этот метод возвращает FormRun.
Попробуйте так
X++:
info(Grid.Owner().toString());
__________________
Axapta v.3.0 sp5 kr2
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
AX UK: Dynamics AX UK Demo Data Available to download Blog bot DAX Blogs 0 30.07.2007 14:40
casperkamal: Data XML Generation Wizard - Version 2.0 For Dynamics Ax Blog bot DAX Blogs 0 04.03.2007 23:04
dynamicsmatters: Dynamics Ax Base Data model Part I Blog bot DAX Blogs 0 02.12.2006 23:49
Использование View как Data Source или Нормализация Базы Знаний в Axapta rohlenko DAX: Программирование 15 17.02.2005 14:00
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43

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

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

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