DBLookupComboboxEh 使用自动下拉问题(急) ( 积分: 200 )

  • 主题发起人 主题发起人 felicity
  • 开始时间 开始时间
F

felicity

Unregistered / Unconfirmed
GUEST, unregistred user!
我有一组数据集。
DBLookUpComboBoxEh
设置:listSouce和DropDownBox的ListSource相同。显示三列 :
(BH,BM,ZW 编号,部门,职能)
AAA,BBB,CCC
DDD,EEE,FFF

当输入A,B,C时自动显示到第一行
当输入D,E,F时自动显示到第二行
就是说,根据数据的不同自动选择索引。但是是在退出下拉列表却要显示[red]BM[/red]的值。
设置
KeyField: BH
ListField: BH;BM;ZW
ListFieldIndex: 1 [blue](当把这个设定死之后,会一直按这个显示和索引)[/blue]
我看到别人的软件做到了。大家有什么办法吗?
 
问题已解决。

通过修改Ehlib3.6 中的DBLookupEh.pas 来完成。

大家来抢分
^_^


修改后源代码如下:(共二处)
procedure TCustomDBLookupComboboxEh.KeyValueChanged;
begin
FDataLink.Modified;
Modified := True;
if not FKeyTextIndependent then
if ListActive then
begin
if LocateKey and not DropDownBox.SpecRow.LocateKey(FKeyValue) then
if (DataSource <> nil ) and ( not (DataSource.DataSet.State in [dsEdit,dsInsert])) then //[red]添加此条[/red]
SetEditText(FListField.DisplayText);
{else if KeyValue = Null then
SetEditText('')}
end
else if csDesigning in ComponentState then
SetEditText(Name);
{else if Style = csDropDownListEh then
SetEditText('');}
if FListVisible then
FDataList.KeyValue := KeyValue;
if (Style = csDropDownListEh) and HandleAllocated then SelectAll;
if Assigned(FOnKeyValueChanged) then FOnKeyValueChanged(Self);
end;


function TCustomDBLookupComboboxEh.LocateStr(Str: String; PartialKey: Boolean): Boolean;
var
Options: TLocateOptions;
CurOnChangeEvent: TNotifyEvent;
I: Integer;
begin
Result := False;
if not FListActive or not CanModify(True) then Exit;
if PartialKey then
Options := [loCaseInsensitive, loPartialKey]
else
Options := [loCaseInsensitive];
try
//Result := FListLink.DataSet.Locate(FListField.FieldName, Str, Options); 删除此条,添加如下这几条
//-------------------------------
for I := 0 to DropDownBox.Columns.Count - 1 do
begin
try
if FListLink.DataSet.Locate(DropDownBox.Columns.FieldName,Str,Options) and (DropDownBox.Columns.Visible) then
begin
Result := True;
Break;
end;
finally
end;
end;

//------------------------------------------
if Result then
begin
FTextBeenChanged := False;
CurOnChangeEvent := OnChange;
OnChange := HookOnChangeEvent;
SetKeyValue(FListLink.DataSet.FieldValues[FKeyFieldName]);
[red] //SetEditText(FListField.DisplayText);[/red] 删除此条
SelStart := Length(Text);
SelLength := Length(Str) - SelStart;
OnChange := CurOnChangeEvent;
if FTextBeenChanged and Assigned(OnChange) then
OnChange(Self);
end else if Style = csDropDownEh then
SetKeyValue(Null);
except
{ If you attempt to search for a String larger than what the field
can hold, and exception will be raised. Just trap it and
reset the SearchText back to the old value. }
if Style = csDropDownListEh then
begin
SetEditText(Text);
SelStart := Length(Text);
SelLength := Length(Text) - SelStart;
end else
SetKeyValue(Null);
end;
end;
 
呃,来看看
 
散了.只有一个人来了.就散吧.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部