26.04.2004, 10:23 | #1 |
Участник
|
Как запольнить грид данными из таблицы с филтьтрацией.
Я могу заполнить датагрид просто данными из таблицы, указав для грида datasource.
А как заполнить грид данными с фильтрацией, т.е. только те записи в которых название начинается с определенной буквы или поле не пустое. Чувсвую надо использовать Query - так как там есть Ranges - для фильтрации записей - а как приекрутить query к datasource или напрямую к гриду не представляю. |
|
26.04.2004, 11:40 | #2 |
Участник
|
В Init датасорса пишете
queryBuildRange = this.query().datasourceTable(tableNum(<имя таблицы>).addRange(fieldNum(...)); В executeQuery датасорса пишете queryBuildRange.value(queryValue('x*')); - все что начинается с Х queryBuildRange queryBuildRange; // объявляется в ClassDeclaration формы |
|
26.04.2004, 12:12 | #3 |
Участник
|
Спасибо, получилось заполнить грид. Но такое впечатление что он read only - да и просто по программисткой логике он таким и является раз заполняется динамически а не связкой с datasource. Как сделать так что бы внесенные в этот грид изменения, новые строки добавлялись/обновлялись в БД. Сейчас когда я меняю значения в полях строки грида - они "стираются" при переходе на другое поле.
|
|
26.04.2004, 12:16 | #4 |
Участник
|
Честно говоря, не знаю как у вас такое произошло
Если в гриде есть данные, то с датасорсом он связан. Если на датасорсе есть фильтр то он не становится read only |
|
26.04.2004, 13:18 | #5 |
Участник
|
дело вот в чем - я сначала пробовал работать с QueryBuildDataSource и те симптомы что я описал - воспроизводились при использовании QueryBuildDataSource.
Попробовал как вы советуете - завел в описании класса формы PHP код:
PHP код:
при запуске формы система ругается: Цитата:
---------------------------
Navision Axapta Debugger --------------------------- Ошибка времени выполнения. : <empty class> object не инициализирован. Трассировка стека: (C) \Classes\<unknown>\dataSourceTable (C) \Forms\InventTable\Data Sources\InventTableSome\Methods\init - line 12 --------------------------- OK --------------------------- |
|
26.04.2004, 13:31 | #6 |
Moderator
|
Все это хозяйство: this.query()... надо вызывать после вызова super().
__________________
Андрей. |
|
26.04.2004, 13:51 | #7 |
Участник
|
Цитата:
Изначально опубликовано Dron AKA andy
Все это хозяйство: this.query()... надо вызывать после вызова super(). Еще вопрос - сейчас организовано у меня так - есть форма, на ней несколько табов, на одном табе грид - связанный с datasource InventTable - который тянет данные из таблицы InventTable. на другом табе грид - связанный с datasource InventTableSome - который тянет данные из этой же таблицы InventTable. как я заметил редактирование для записи в гриде во втором табе доступно только для строки которая является текущей в гриде в первом табе. Как от этого избавится. Или делать отдельную форму ? |
|
26.04.2004, 14:15 | #8 |
Участник
|
Цитата:
А вообще есть какое эмпирическое правило - когда вызывать метод базого класса - до или после вызова метода (что такое методы базового класса я знаю - справшиваю применительно к аксапте) - вель данные для query() могли быть инициализированы и не из super.Init();
Цитата:
как я заметил редактирование для записи в гриде во втором табе доступно только для строки которая является текущей в гриде в первом табе. Как от этого избавится. Или делать отдельную форму ?
|
|
26.04.2004, 14:38 | #9 |
Moderator
|
To IS:
Вполне нормальная ситуация: одна и та же таблица показывается на разных закладках, причем, скорее всего, отображаются по разному отфильтрованные данные. 2 Datasource. Все должно работать независимо. Проверьте еще раз datasource на гридах, на полях этих гридов...
__________________
Андрей. |
|
26.04.2004, 16:20 | #10 |
Участник
|
Пока решил пойти по простому пути - создал отделную форму,
положил на нее TAB/TABPAGE/GRID. Завел датасорс, соединил его с таблицей. Перекрыл как указывалось init & executeQuery таблицы - открываю форму - видны все записи !!! Тогда ручками из контектсного меню фильтрую по интересующему полю/убираю фильтр и вижу единсвенную запись но со значеним фильтра (который указывался в executeQuery) - то есть это и не запись вообще. !!! И еще вопрос по дизайну форм - в других формах вижу что ширина и высота форм и табов указывается в виде Column width / Column height - пробовал так делать у себя - with no luck - получаю форму с нулевой высотой и шириной - виден только caption. Пришлось выставить размеры в определенные значения - в принципе жить можно, но несколько некрасиво - в чем может быть дело ? |
|
26.04.2004, 17:04 | #11 |
Moderator
|
Цитата:
Изначально опубликовано IS
... вижу единсвенную запись но со значеним фильтра (который указывался в executeQuery)... Если так, объясняю: здесь это надо делать до super(), т.к. этот супер и вызывает выполнение запроса с указанными вами критериями.
__________________
Андрей. |
|
26.04.2004, 18:05 | #12 |
Участник
|
Цитата:
Изначально опубликовано Dron AKA andy
А теперь, похоже , Вы присваиваете значение range в executeQuery() после вызова super() . Если так, объясняю: здесь это надо делать до super(), т.к. этот супер и вызывает выполнение запроса с указанными вами критериями. |
|