Страница 1 из 1

TRxDBLookupCombo

СообщениеДобавлено: 21.11.2016 10:12:55
kit
Почему не работает без задания 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;

Re: TRxDBLookupCombo

СообщениеДобавлено: 21.11.2016 10:28:43
alexs
kit писал(а):Почему не работает без задания LookupSource?

А в чём смысл этой компоненты без лукапа?
Откуда значения брать?

Re: TRxDBLookupCombo

СообщениеДобавлено: 21.11.2016 10:36:34
kit
Надо создавать при инициалицации так как в TDBLookupComboBox
FLookupSource := TDataSource.Create(Self);

Re: TRxDBLookupCombo

СообщениеДобавлено: 21.11.2016 13:45:03
alexs
Зачем?
Там надо указывать тот источник данных, который содержит в себе справочные значение.
А так - ну создали - и что?
Кто данные предоставит?
И если я потом указываю свой источник данных - с этим созданным что делать?

Re: TRxDBLookupCombo

СообщениеДобавлено: 21.11.2016 16:48:49
kit
В TDBLookupComboBox работает.. но там есть проблема если KeyField = 'id1;id2';

Re: TRxDBLookupCombo

СообщениеДобавлено: 05.02.2018 17:58:09
alexs
Чтобы не начинать новую тему
Ревизия 6177.Реализовал новое свойство - RxDBLookupCombo.Style

Re: TRxDBLookupCombo

СообщениеДобавлено: 10.02.2018 21:09:40
alexkam
У TRxDBLookupCombo Height=27 Как сделать меньше? Чтобы выглядел как стандартный.

Re: TRxDBLookupCombo

СообщениеДобавлено: 11.02.2018 01:49:40
alexs
Самому уменьшать. Если есть возможность - привязать по высоте к расположенному рядом какому нибудь edit-у или combobox-у.
На самом деле - это у меня проблема сейчас. Я не знаю как получить стандартную высоту ComboBox-а в системе для установки её в лукапе.
Если кто знает - делитесь секретом.

Re: TRxDBLookupCombo

СообщениеДобавлено: 01.12.2018 15:58:59
kit
Реально сделать фильтр списка lookup?
Может так как в JvDBCombobox.pas по условию Pos(Text, Items[Index]) > 0 прорисовивать DrawText

Re: TRxDBLookupCombo

СообщениеДобавлено: 01.12.2018 16:07:19
alexs
там в виде списка используется RxDBGrid. Используй фильтра на подключенный датасет.