20.06.2006, 14:41 | #1 |
Участник
|
Advanced programming: Grid data and view manipulations
Уважаемые гуру Аксапты. Надеюсь я вам не надоел еще со своими дурацкими вопросиками? Нет? У меня еще есть:
Спасибо за понимание, Сергей. |
|
20.06.2006, 15:38 | #2 |
Участник
|
Вы про адвансед всегда думаете на буржуйском, аля как программирую так и думаю? Спрошу за всех - не понял как все это к гридам Аксы относится - это ж не ехель, или я не понял сути?
|
|
20.06.2006, 16:40 | #3 |
Участник
|
Я бы посоветовал почитать сначала Developer's Guide.
Ну, если уж совсем нету времени (один вечер нужно, не больше), то откройте только раздел про создание форм - там очень доходчиво описаны возможности гридов. По первому вопросу: Перебор записей Form Data Source при множественном выборе Используются методы dataSource getFirst, getNext - это не будет менять текущее положение курсора в гриде, если же использовать next, first() - то положение будет меняться соответственно. по второму вопросу - метод findRecord() - нужно знать значение RecId той строки, на которую хотите перейти. Позиционирование курсора на конкретной записи в Data Source на форме (плюс заодно беседа о его производительности) И вообще, посмотрите какие методы есть на датасорсе - можно сразу станет понятней, что он может, а что нет |
|
|
За это сообщение автора поблагодарили: batiskaf_new (1). |
20.06.2006, 16:59 | #4 |
Роман Долгополов (RDOL)
|
Вопрос
А эта Ваша суперпуперавтокнопомышководилка должна общаться с гридом посредством юзерского интерфейса или годятся способы манипулирования данными минуя непосредственно контрол грида? |
|
20.06.2006, 17:07 | #5 |
Banned
|
Сочувствую. Grid в Аксапте отрисовывает себя целиком, отдельные ячейки окнами не являются, однако являются равноправными элементами формы Аксапта.
|
|
20.06.2006, 17:22 | #6 |
Участник
|
по-моему текущая редатируемая ячейка является окном
|
|
20.06.2006, 18:19 | #7 |
Участник
|
Цитата:
Сообщение от MironovI
Вы про адвансед всегда думаете на буржуйском, аля как программирую так и думаю? Спрошу за всех - не понял как все это к гридам Аксы относится - это ж не ехель, или я не понял сути?
|
|
20.06.2006, 18:25 | #8 |
Участник
|
Цитата:
Сообщение от db
Вопрос
А эта Ваша суперпуперавтокнопомышководилка должна общаться с гридом посредством юзерского интерфейса или годятся способы манипулирования данными минуя непосредственно контрол грида? Функционалом прийдется пользоваться в любом случае, чтобы посчитать координаты, найти запись, а вот ввести значение нужно будет только физическими средствами. |
|
21.06.2006, 00:17 | #9 |
Участник
|
По-моему, вы просто неправильно подходите к программированию в Аксапте, забывая, что это уже не прикладное, а ERP-программирование.
Но, раз надо, разбирайтесь. По поводу вызова контекстного меню - его можно динамически формировать, и открывать только на выбранных строках грида, но опять же, привязка будет идти не по номеру строки грида, потому что такого понятия нет в принципе, а по ключу или по RecId текущей строки. Вывод своего контекстного меню реализован в системе на различных формах, посмотрите,к примеру, ГК\Запросы\Оборот по счету\Шахматная ведомость оборотов по счетам (правда там используется не грид, но я такое же делал в гриде когда-то, если память не изменяет) По поводу подсчета количества отображаемых строк - можно пойти двумя путями: 1. Перебрать все записи в гриде, используя датасорс. 2. Использовать запрос текущий формы (лучше для этого использовать именно queryRun.query(), а не просто query() датасорса, так как последний не учитывает фильтров, которые наложил пользователь на отображение данных). Так вот, по query можно построить объект класса QueryRun и загнать его в статический метод класса SysQuery - SysQuery::countTotal() - он вернет количество строк, которые вернет переданный в него запроса - правда, при количестве датасорсов в запросе это все равно будет полный проход по всем строкам с увеличением счетчика, то есть особо в производительности вы не выиграете по сравнению с первым пунктом. (В случае одного датасорса получаем запрос с использованием агрегатной функции count()) |
|
21.06.2006, 10:10 | #10 |
Участник
|
Кашперук, я ERP программированием не занимаюсь, мне нужны самые общие параметры гридов, для того чтобы по общим параметрам написать автоматический тест, который потом после каждого изменения в вашей аппликации сможет протестировать функционал на наличие багов логики.
|
|
21.06.2006, 10:15 | #11 |
Участник
|
Вопрос. Как получить dataSource из Grid? Подчеркиваю, у меня есть только ссылка на гуи элемент FormGridControl, метод dataSource возвращает идентификатор, который не понятно куда дальше нужно запихивать чтобы получить ссылку на объект датасорс. У формы метод dataSource возвращает ссылку на объект (допустим что форму я получаю по Grid.owner().owner() и так далее, если есть проще способ получить форму то подскажите), но он требует имени датасорса, имя я могу узнать только в рантайме.
|
|
21.06.2006, 10:45 | #12 |
Участник
|
Метод DataSource() грида возвращает id датасоурса на форме. Получить сам объект датасоурса можно, например так
X++: int i; ; for (i=1;i<=this.dataSourceCount();i++) { if (element.dataSource(i).id() == Grid.dataSource()) { // element.dataSource(i) - это и есть нужный вам объект break; } }
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 21.06.2006 в 10:51. |
|
|
За это сообщение автора поблагодарили: batiskaf_new (1). |
21.06.2006, 11:02 | #13 |
Участник
|
ОК, я тоже думал про итерацию, если другого способа не предвидится, оказалось что таки не предвидится... Элемента у меня нет, я получаю ссылку на Grid в контексте инстанса другого класса, моего класса, даже не формы, просто класс Agent. Вобщем за неимением element прийдется пользоваться owner, я верно понимаю?
|
|
21.06.2006, 11:20 | #14 |
Участник
|
Кстати, а разве Grid.Owner() указывает не объект FormRun?
__________________
Axapta v.3.0 sp5 kr2 |
|
21.06.2006, 11:27 | #15 |
Участник
|
Насколько я понимаю - не всегда, грид может лежать на табе, или другом контейнере. Вобщем понятно.
|
|
21.06.2006, 11:44 | #16 |
Участник
|
Не-а. Именно что этот метод возвращает FormRun.
Попробуйте так X++: info(Grid.Owner().toString());
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|