C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Проблема с TDBLookupComboboxEh из EhLib, кто работал с ним  — подскажите !
pasha
Отправлено: 26.05.2004, 12:47


Дежурный стрелочник

Группа: Участник
Сообщений: 62



Есть на форме таблица Table1 и компонент DBLookupComboBoxEh1
DataSource1 и DBGrid1

При движении по DBLookupComboBoxEh1 изменяется текущая запись в Table1,
а вот при движении по таблице текущая запись в DBLookupComboBoxEh1 остается на месте.

Пытался в событии DataSource1 onDataChange
это дело отследить, но получаю StackOverflow, ohmy.gif
причем, если вместо Ehlib-овского DBLookupComboBoxEh
использовать стандартный или RXLib-овский — все нормально
работает.

Прописано все правильно:
ListSource = DataSource1
ListField = Name
KeyField = SpeciesNo

CODE

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Table->Open();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::DataSource1DataChange(TObject *Sender,
TField *Field)
{
//DBLookupComboBoxEh1->KeyValue = TableSpeciesNo->AsInteger; // StackOverflow !!!
DBLookupComboBox1->KeyValue = TableSpeciesNo->AsInteger; // Ok — стандартный
RxDBLookupCombo1->KeyValue = TableSpeciesNo->AsInteger; // Ok — RxLib-овский
}
//---------------------------------------------------------------------------

Как у Вас ??? :( И как это дело исправить ?


Отредактировано pasha — 26/05/2004, 14:52
pasha
Отправлено: 26.05.2004, 14:14


Дежурный стрелочник

Группа: Участник
Сообщений: 62



Задачку эту решил.
Проблема была в циклической ссылке — так как и Grid и DBLookupComboBoxEh работают через один и тот-же
DataSource1, то при наступлении события onDataChange
наступает цикл -
onDataChange от Grid вызывает
onDataChange от DBLookupComboBoxEh вызвает
onDataChange от Grid вызывает
onDataChange от DBLookupComboBoxEh вызвает
...

Хотя и странно, что RxLib-овский и стандартный BCB компоненты
работают нормально.

Решил вот так:

CODE

void __fastcall TForm1::DataSource1DataChange(TObject *Sender, TField *Field)
{
DataSource1->OnDataChange = NULL; // !!!
DBLookupComboBoxEh1->KeyValue = TableSpeciesNo->AsInteger;
DataSource1->OnDataChange = DataSource1DataChange;
}
//---------------------------------------------------------------------------


biggrin.gif biggrin.gif biggrin.gif

Отредактировано pasha — 26/05/2004, 16:17

Вернуться в Вопросы программирования в C++Builder