|
|
#1 |
|
Участник
|
Отображение десятичных знаков в форме
Привет всем!
Одно и то же поле таблицы должно отображаться в 2х разных формах по разному: в одной - количество знаков после запятой - 11 (как указано в EDT), а в другой - 2. Как сделать второй вариант? ![]() PS NoOfDecimals в свойствах контрола не доступно из-за AutoDataGroup.. Последний раз редактировалось decoder; 26.10.2009 в 17:23. |
|
|
|
|
#2 |
|
Ищущий знания...
|
в десигне формы у полей типа RealEdit есть свойство NoOfDecimals (число десятичных знаков отображения). Выставляете там такую цифирку сколько хотите видеть на форме, и будет вам счастье.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#3 |
|
Участник
|
Вы же понимаете, что если во второй форме вы ограничите количество отображаемых знаков после запятой двумя, то и ввести в этой форме вы сможете только 2 знака после запятой, а не 11..
Просто предупреждаю заранее
|
|
|
|
|
#4 |
|
Боец
|
Цитата:
element.control(control::ControlName).NoOfDecimals |
|
|
|
|
#5 |
|
Ищущий знания...
|
поставить AutoDataGroup в No, и выставить нужное свойство
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
|
|
#6 |
|
Участник
|
Не, отказываться от AutoDataGroup == Yes из-за такой мелочи не стоит - уж слишком полезное это свойство
Более, на мой взгляд, гибкое решения можно найти тут: Итератор с поддержкой методов обратного вызова для обработки контролов на форме. В данном конкретном случае можно в методе обратного вызова у FormRealControl проверять свойства dataSource() и dataField(): первое должно совпадать с MyTable_DS.id() (к которому относится поле), а второе - с extendedFieldId поля в таблице, т.е., например, с fieldId2Ext( fieldnum(MyTable, MyRealField), 1 ). Если совпали, значит, итератор передал контрол, связанный с нужным полем, и надо выставить у него свойство NoOfDecimals. Учтите, что таких контролов на форме может быть несколько, поэтому, в частности, варианты с использованием enum'а Control не являются надежным решением, кроме того, так вы привязываетесь к конкретному названию контрола на форме, хотя по постановке задачи скорее должны привязываться к полю таблицы.Цитата:
Последний раз редактировалось gl00mie; 26.10.2009 в 19:05. |
|
|
|
|
#7 |
|
Участник
|
Как вариант. Сделать display или даже edit метод (если необходимо редактирование), который будет возвращать/принимать расширенный тип данных с заранее настроенной точностью. Вынести созданный метод в нужную группу полей.
Преимущество: AutoDataGroup == Yes; отсутствие кода на форме Недостаток: будет невозможно сортировать и фильтровать по дисплэйному полю |
|
|
|
|
#8 |
|
Участник
|
оч удобно, но порождает ошибку run-time..
Цитата:
Сообщение от gl00mie
В данном конкретном случае можно в методе обратного вызова у FormRealControl проверять свойства dataSource() и dataField(): первое должно совпадать с MyTable_DS.id() (к которому относится поле), а второе - с extendedFieldId поля в таблице, т.е., например, с fieldId2Ext( fieldnum(MyTable, MyRealField), 1 ). Если совпали, значит, итератор передал контрол, связанный с нужным полем, и надо выставить у него свойство NoOfDecimals..
Последний раз редактировалось decoder; 27.10.2009 в 12:54. |
|
|
|
|
#9 |
|
Боец
|
Какую именно ошибку? Я привел "сырой" код, ест-но нужно оформить немножко.
Пример для формы tutorial_Form_Controls: X++: public void init() { super(); element.setPrecision(); } X++: void setPrecision() { FormRealControl formRealControl; ; formRealControl = element.control(control::RealEdit); if (formRealControl) { formRealControl.NoOfDecimals(16); } } |
|
|
|
|
#10 |
|
Участник
|
|
|
|
|
|
#11 |
|
Боец
|
очень странно... Вы вместо "RealEdit" подставляете имя контрола?
Вот, попробуйте рабочие примеры: DAX 3.0: tutorial_Form_Controls_30.xpo DAX 4.0: Form_tutorial_Form_Controls_40.xpo DAX 5.0: Form_tutorial_Form_Controls_50.xpo |
|
|
|
|
#12 |
|
Участник
|
ошибка проявляется не каждый раз
про тож самое Итератор с поддержкой методов обратного вызова для обработки контролов на форме |
|
|
|
| За это сообщение автора поблагодарили: DSPIC (1). | |
|
|
#13 |
|
Участник
|
где-нить после super() в init() формы пишем примерно следующее:
X++: DEV_iterateThroughFormControls( element.design(), element, @"setFieldPrecision", DEV_FormHelpers::addRealCtrlId2Set() );X++: public void setFieldPrecision(FormRealControl _formControl) { // проверяем, связан ли контрол с нужным полем datasource'а на форме if ( _formControl.dataSource() == MyTable_DS.id() && _formControl.dataField() == fieldId2Ext( fieldnum(MyTable, MyRealField), 1 ) ) { _formControl.noOfDecimals( 11, AutoMode::Fixed ); } } |
|
|
|
| За это сообщение автора поблагодарили: decoder (1). | |
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|