| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > DataControls не изменяют DataSet в нужный момент |
| Автор: ZVano 15.12.2010, 13:58 | ||||
| Проблемма со стандартными компонентами ввода данных (TDBLookupComboBox, TDBCheckBox и т.д.). Эти компоненты модифицируют набор данных DataSet только в момент потери фокуса. (OnExit) Мне нужно заставить компонент выполнить модификацию в любой момент. Например: Пользователь выбрал строку из выпадающего списка TDBLookupComboBox, но компонент фокус не потерял. Решил этот момент таким костылем:
Т.е. отловил момент закрытия списка выбора и принудительно переключил фокус на след.контрол, затем вернулся на предыдущий. Этот костыль хоть и не нравится мне, но все же работает. А как быть с TDBCheckBox? Пользователь может кликать по нему до посинения, а DataSet не изменится. Попытка сместить фокус в обработчике OnClick вызывает исключение.
Получаю жуткую ошибку "Abnormal program termination". Вобщем, нужно сделать так, чтобы при редактировании данных в контроле они тут-же изменяли DataSet. Либо корректно делать это обрабатывая события ввода. |
| Автор: _Dimon_ 16.12.2010, 14:19 | ||
|
| Автор: ZVano 16.12.2010, 16:57 | ||||||
Не подходит: 1. Данные не должны быть отправлены на сервер - набор данных должен стать "DataSource->DataSet->Modified == true" 2. Получаем исключение "...: Dataset not in edit or insert mode" при попытке использовать этот подход для "TDBCheckBox"
И эта ошибка вполне ожидаема т.к. клик по объекту TDBCheckBox не вызывает изменения в связаном DataSet, что и является проблеммой, которую нужно обойти. |
| Автор: _Dimon_ 16.12.2010, 19:50 | ||
Незнаю почему, но первый клик не отображает замены, а потом нормально .... надо еще подумать ..... З.Ы. Перед тем как щелкать чекбокс ты вызываеш Edit() ? |
| Автор: ZVano 17.12.2010, 10:37 |
| Перед щелчком Edit() не вызываю. Он происходит автоматически. Приатачиваю тестовый проект, который скидывает в лог все события и состояние DataSet. Нужно заставить кнопку "bnTbl1Save" быть активной после клика по DBCheckBox. |