TRxDBLookupCombo

Модераторы: alexs, Модераторы

TRxDBLookupCombo

Сообщение kit » 21.11.2016 10:12:55

Почему не работает без задания LookupSource?
В TDBLookupComboBox если DataField := DataSet.LookupField то LookupSource создается автоматически:

procedure TDBLookup.DoInitialize;
var
ListFields: TList;
ListLinkDataset: TDataSet;
begin
FDataFields.Clear;
FKeyFields.Clear;
FListField := nil;
FHasLookUpField := False;
FLookUpFieldIsCached := False;
if Assigned(FControlLink) and Assigned(FControlLink.DataSet)
and FControlLink.DataSet.Active then
begin
if Assigned(FControlLink.Field) then
begin
FHasLookUpField := (FControlLink.Field.FieldKind = fkLookup);
FLookUpFieldIsCached := (FHasLookupField and FControlLink.Field.LookupCache);
if FHasLookUpField then
begin
if FLookupSource = nil then
FLookupSource := TDataSource.Create(Self);
if (FLookupSource.DataSet <> FControlLink.Field.LookupDataSet) then
FLookupSource.DataSet:= FControlLink.Field.LookupDataSet;
FListLink.DataSource := FLookupSource;
FDataFieldNames := FControlLink.Field.KeyFields;
FKeyFieldNames := FControlLink.Field.LookupKeyFields;
end else
FDataFieldNames := FControlLink.Field.FieldName;
FControlLink.DataSet.GetFieldList(FDataFields, FDataFieldNames);
end;
end;
if not FHasLookUpField then
FListLink.DataSource := FListSource;

if (FKeyFieldNames > '') and FListLink.Active then
begin
ListLinkDataset := FListLink.DataSet;
ListFields := TList.Create;
try
ListLinkDataset.GetFieldList(ListFields, FListFieldName);
ListLinkDataset.GetFieldList(FKeyFields, FKeyFieldNames);
if FHasLookUpField then
begin
FListField := ListLinkDataset.FindField(FControlLink.Field.LookupResultField);
if (Assigned(FListField) and (ListFields.IndexOf(FListField) < 0)) then
ListFields.Insert(0, FListField);
if (ListFields.Count > 0) then
FListField := TField(ListFields[0]);
end else
begin
if ((FKeyFields.Count > 0) and (ListFields.Count = 0)) then
ListFields.Add(FKeyFields[0]);
if ((FListFieldIndex > -1) and (FListFieldIndex < ListFields.Count)) then
FListField := TField(ListFields[FListFieldIndex])
else
FListField := TField(ListFields[0]);
end;
finally
ListFields.Free;
end;
FetchLookupData;
end;
end;
kit
новенький
 
Сообщения: 98
Зарегистрирован: 29.09.2016 09:39:07

Re: TRxDBLookupCombo

Сообщение alexs » 21.11.2016 10:28:43

kit писал(а):Почему не работает без задания LookupSource?

А в чём смысл этой компоненты без лукапа?
Откуда значения брать?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3464
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TRxDBLookupCombo

Сообщение kit » 21.11.2016 10:36:34

Надо создавать при инициалицации так как в TDBLookupComboBox
FLookupSource := TDataSource.Create(Self);
kit
новенький
 
Сообщения: 98
Зарегистрирован: 29.09.2016 09:39:07

Re: TRxDBLookupCombo

Сообщение alexs » 21.11.2016 13:45:03

Зачем?
Там надо указывать тот источник данных, который содержит в себе справочные значение.
А так - ну создали - и что?
Кто данные предоставит?
И если я потом указываю свой источник данных - с этим созданным что делать?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 3464
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: TRxDBLookupCombo

Сообщение kit » 21.11.2016 16:48:49

В TDBLookupComboBox работает.. но там есть проблема если KeyField = 'id1;id2';
kit
новенький
 
Сообщения: 98
Зарегистрирован: 29.09.2016 09:39:07


Вернуться в RxLib

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

Рейтинг@Mail.ru