Проблема работы Dblookupcombobox под Xe2
Недавно перешел с D7 на XE2.
И тут возникла неприятная ситуация с отчетами.
На диалоговой формы лежат два компонента класса TfrxDBLookupComboBox.
(Всем понятно что TfrxDBLookupComboBox использует стандартный TDBLookupComboBox без указания DataSource и DataField)
У обоих указан один и тот-же DataSet.
Открыва DataSet (читаю данные какой-либо таблицы).
Устанавливаю в коде значения по-умолчанию:
DBLookupComboBox1.KeyValue := 1;
DBLookupComboBox2.KeyValue := 2;
И вот тут возникает проблема из-за кода в исходниках XE2.
При установке значения KeyValue сначала делается поиск этого значения в DataSet`е.
Но в XE2 появился код (Vcl.DBCtrls.pas):
procedure TCustomDBLookupComboBox.ListLinkDataChanged;
begin
{ Fix for Defect# 204311, Non-bound control should clear when list datasource changes }
if (FDataField = nil) and ListActive and (FListDataChanging = 0) and
(FDataList.FListDataChanging = 0) and ListLink.DataSet.BOF then
begin
SetKeyValue(Null);
end;
end;
В результате, после установки DBLookupComboBox2.KeyValue в DBLookupComboBox1.KeyValue будет null.
Как теперь это обойти?
И тут возникла неприятная ситуация с отчетами.
На диалоговой формы лежат два компонента класса TfrxDBLookupComboBox.
(Всем понятно что TfrxDBLookupComboBox использует стандартный TDBLookupComboBox без указания DataSource и DataField)
У обоих указан один и тот-же DataSet.
Открыва DataSet (читаю данные какой-либо таблицы).
Устанавливаю в коде значения по-умолчанию:
DBLookupComboBox1.KeyValue := 1;
DBLookupComboBox2.KeyValue := 2;
И вот тут возникает проблема из-за кода в исходниках XE2.
При установке значения KeyValue сначала делается поиск этого значения в DataSet`е.
Но в XE2 появился код (Vcl.DBCtrls.pas):
procedure TCustomDBLookupComboBox.ListLinkDataChanged;
begin
{ Fix for Defect# 204311, Non-bound control should clear when list datasource changes }
if (FDataField = nil) and ListActive and (FListDataChanging = 0) and
(FDataList.FListDataChanging = 0) and ListLink.DataSet.BOF then
begin
SetKeyValue(Null);
end;
end;
В результате, после установки DBLookupComboBox2.KeyValue в DBLookupComboBox1.KeyValue будет null.
Как теперь это обойти?