我正在尝试使用以下命令更改DBLookupComboBox的可见文本(值):
DBLookupComboBox1.KeyValue:=S;
和
DBLookupComboBox2.KeyValue:=X;
如果KeyValue和S是字符串,那么一切正常,我可以设置值。
但是当KeyValue是一个整数/ Int64(数据库中的UID),而X是一个Int64变量时 - 它不起作用,没有任何变化。
因此,举个例子,我需要在DBLookupComboBox1中设置“Amsterdam”,在DBLookupComboBox2中设置1500。 “阿姆斯特丹”来自“城市”领域的用户,以及1500作为UID。
我做错了什么?
由于
答案 0 :(得分:1)
设置KeyValue会调用TDBLookupControl的SetKeyValue,它在Delphi 7中显示为:
procedure TDBLookupControl.SetKeyValue(const Value: Variant);
begin
if not VarEquals(FKeyValue, Value) then
begin
FKeyValue := Value;
KeyValueChanged;
end;
end;
procedure TDBLookupComboBox.KeyValueChanged;
begin
if FLookupMode then
begin
FText := FDataField.DisplayText;
FAlignment := FDataField.Alignment;
end else
if ListActive and LocateKey then
begin
FText := FListField.DisplayText;
FAlignment := FListField.Alignment;
end else
begin
FText := '';
FAlignment := taLeftJustify;
end;
Invalidate;
end;
如您所见,您的变量x用作LocateKey的一部分。
function TDBLookupControl.LocateKey: Boolean;
var
KeySave: Variant;
begin
Result := False;
try
KeySave := FKeyValue;
if not VarIsNull(FKeyValue) and FListLink.DataSet.Active and
FListLink.DataSet.Locate(FKeyFieldName, FKeyValue, []) then // << ---here
begin
Result := True;
FKeyValue := KeySave;
end;
except
end;
end;
进入这些程序和功能应该可以帮助您调试问题。所有这些都位于DbCtrls单元..
答案 1 :(得分:1)
我已经使用了它并解决了我的问题。
在Form1.OnShow
使用以下代码行:
DBLookupComboBox1.ListSource.DataSet.Locate('City', 'Amsterdam', []);
DBLookupComboBox1.ListSource.DataSet.FieldByName(DBLookupComboBox1.KeyField).Value;
DBLookupComboBox2.ListSource.DataSet.Locate('UID', '1500', []);
DBLookupComboBox2.ListSource.DataSet.FieldByName(DBLookupComboBox2.KeyField).Value;
答案 2 :(得分:0)
此代码对您很重要:
lkcbbArzSource.KeyValue:=2;//c(or another number);
lkcbbArzSource
是dbLookupComboBox
对象,您只能在其中插入数字!为什么?因为是数字,而另一方面是一个字段,以组合形式显示该数字的文本或字符串。
在下面的示例代码中,您可以看到dbLookupComboBox
如何管理和填充数据集并添加网格:
rzSource.Enabled:= True;
lkcbbArzSource.Font.Size:=8;
lkcbbArzSource.Tag := V_Counter;
lkcbbArzSource.Visible:= True;
lkcbbArzSource.Enabled:= True;
lkcbbArzSource.Font.Name:='tahoma';
lkcbbArzSource.ListSource := myDsrSource;
lkcbbArzSource.KeyField := 'Code';
lkcbbArzSource.ListField := 'Des';
lkcbbArzSource.KeyValue:= IntToStr(FieldByName('P_ARZSOURCE').AsInteger);
lkcbbArzSource.OnChange := myBicLookUpChange;
SGrid2.Objects[look_col,lkcbbArzSource.Tag]:= lkcbbArzSource;
SGRID2.Objects[look_col,V_Counter] := nil;c