谁在 DBCtrlGrid中用DBLookupComboBox1重赏100分(100分)

  • 主题发起人 主题发起人 zysu
  • 开始时间 开始时间
Z

zysu

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能在 DBCtrlGrid中用DBLookupComboBox1重赏100分
本人在使用 DBCtrlGrid中觉得能以多行显示记录并比dbgid直观
编辑,查询很满意,可是在本记录中有字段为代码需引用其它库来选择
而使用了DBLookupComboBox 可是我在选择listsource时系统显示
"operation not allowed in a dbctrlgrid" 很可惜不知哪位高手能
帮忙解决一下,或提出其它方案.在下不胜感激先拜谢!在下很急!!
 
你仔细看一看 TDBLookupControl 的源代码就知道了,这样做的确不对,正确的做法应该是
为你的 Dataset 添加 LookUp 字段,然后把 DBLookupComboBox 连接到这个 LookUp 字段上。
我测试过了的。不知道为什么,Borland 的 Help 文档中没有提到这一点,也许用 TDBCtrlGrid
的人不多吧。

下面是 TDBLookupControl 与此相关的的源代码:

procedure TDBLookupControl.SetListSource(Value: TDataSource);
begin
CheckNotLookup; // 设置 ListSource 时首先要 Check ,如果 Check 失败,就会弹出你所说的错误
FListLink.DataSource := Value;
if Value <> nil then Value.FreeNotification(Self);
end;
procedure TDBLookupControl.CheckNotLookup;
begin
if FLookupMode then DatabaseError(SPropDefByLookup);// 关键在于 FLookupMode 的值
if FDataLink.DataSourceFixed then DatabaseError(SDataSourceFixed);
end;
procedure TDBLookupControl.SetLookupMode(Value: Boolean);
begin
if FLookupMode <> Value then
if Value then // FLookupMode 为真的话,直接取 TDataSet 的 Lookup 字段,并且不允许再设置 ListSource
begin
FMasterField := GetFieldProperty(FDataField.DataSet, Self, FDataField.KeyFields);
FLookupSource.DataSet := FDataField.LookupDataSet;
FKeyFieldName := FDataField.LookupKeyFields;
FLookupMode := True;
FListLink.DataSource := FLookupSource;
end else
begin
FListLink.DataSource := nil;
FLookupMode := False;
FKeyFieldName := '';
FLookupSource.DataSet := nil;
FMasterField := FDataField;
end;
end;
 
接受答案了.
 
可否再请教一个问题:如何防止DBCtrlGrid中显示一条空记录
 
呵呵,早知道还有问题,就不要着急发分啦。 :-)

是什么样的空记录?这样的工作应该从 DataSet 入手,Grid 只是一个显示控件,内容还是
取决于 DataSet 。
 
如delphi的demo中ctrlgrid只有一条记录时(或>1时)下拉ctrlgrid的竖直滚动条时ctrlgrid会多出一条空记录
可否避免???
 
这个问题还是应该在 DataSet 一级解决,就类似于 DBGrid 中到了最后一行还向下翻,
就会出现空白的记录让你添加。
你可以修改一下这个 DEMO ,为 tblHoldings 加入 OnNewRecord 事件:

procedure TDM1.tblHoldingsNewRecord(DataSet: TDataSet);
begin
tblHoldings.Cancel;
end;
 
后退
顶部