22.06.2007, 13:35 | #1 |
Участник
|
checkbox in grid
Приветствую)
Форма InventOnhandItem содержит 3 источника: 2 закрыты для редактирования (ds1,ds2), добавлен еще один, который разрешено редактировать(ds3) На форме есть Grid (Grid.datasource == ds1), который содержит Group (Group.datasource == ds2), в группу добавлен checkbox (checkbox.datasource = ds3). Пользователю нужно разрешить менять значение checkbox.Но при указанных свойствах менять не получается Как вариант можно открыть для редактирования ds1,ds2 и при этом закрыть их поля от редактирования. Есть ли еще какой-то способ решения проблемы?
__________________
Step by step... |
|
22.06.2007, 14:04 | #2 |
Участник
|
а добавить checkbox в grid, а не в Group нельзя?
|
|
22.06.2007, 14:07 | #3 |
Участник
|
я в таком случае писал код обходящий все поля таблицы и закрывающий от редактирования их на ds
|
|
22.06.2007, 14:33 | #4 |
Участник
|
Угу. Я тоже. Даже метод для этого есть специальный в классе Global:
X++: static void allowEditFieldsOnFormDs_W(FormDataSource _dataSource, boolean _allowEdit) { DictTable dictTable; DictField dictField; int cx, idx; ; dictTable = new DictTable(_dataSource.table()); for(cx = 1; cx <= dictTable.fieldCnt(); cx ++) { dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(cx)); if(! dictField.isSystem()) { for(idx = 1; idx <= dictField.arraySize(); idx++) { _dataSource.object(fieldId2Ext(dictField.id(), idx)).allowEdit(_allowEdit); } } } } |
|
|
За это сообщение автора поблагодарили: belugin (2). |
22.06.2007, 15:18 | #5 |
Banned
|
Да, гребаный метод, который не проверяет наличие dataSource.object() в трехуровневой среде. Обещали в 5.0 исправить.
|
|
22.06.2007, 15:21 | #6 |
Участник
|
Цитата:
Я помню, столкнулся с какими-то глюками при использовании этого метода. Переписал вот так. Ни разу пока ошибки вроде не вылетали. X++: static void allowEditFieldsOnFormDs_W(FormDataSource _dataSource, boolean _allowEdit) { DictTable dictTable; DictField dictField; int cx, idx; FormDataObject dataSourceField; ; if (!_dataSource) throw error(@"Источник данных пустой. Обратитесь к разработчикам"); dictTable = new DictTable(_dataSource.table()); if (!dictTable) throw error(@"Таблица источника данных пустая. Обратитесь к разработчикам"); for(cx = 1; cx <= dictTable.fieldCnt(); cx ++) { dictField = dictTable.fieldObject(dictTable.fieldCnt2Id(cx)); if (!dictField) throw error(@"Критическая ошибка. Обратитесь к разработчикам"); if(!dictField.isSystem()) { for(idx = 1; idx <= dictField.arraySize(); idx++) { dataSourceField = _dataSource.object(fieldId2Ext(dictField.id(), idx)); if (!dataSourceField) throw error(@"Критическая ошибка при установке доступа на редактирование поля. Обратитесь к разработчикам"); dataSourceField.allowEdit(_allowEdit); } } } } |
|
22.06.2007, 15:40 | #7 |
SAP
|
2 kashperuk Меня всегда интересовал вопрс для чего в тексте ставят @
X++: throw error(@"Критическая ошибка при установке доступа на редактирование поля. Обратитесь к разработчикам"); |
|
22.06.2007, 15:43 | #8 |
Участник
|
Вот здесь все популярно описано.
Кстати второй раз за день ссылки эту привожу. Рекламу делаю Максиму Единственное, что стоит добавить, и именно по этой причине оно используется в моем коде, - BestPractice Check игнорирует RawStrings |
|
|
За это сообщение автора поблагодарили: Мариночка (1), konopello (1). |
22.06.2007, 16:33 | #9 |
Участник
|
Сенкс всем, но... Ведь датасорсы не зря закрыты для редактирования) В свойстве datasource в гриде и группе по прежнему стоят указанные источники. Если я меняю значение только чекбокса и закрываю форму, то происходит вызов validateWrite для источников, а мне это совсем не надо( Как поступить?
__________________
Step by step... |
|
22.06.2007, 16:44 | #10 |
Участник
|
в validateWrite пишем returns true;
в write() комментим super(); |
|