Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi 选择dbgrid中的一行时,如何填充组合框?_Delphi_Combobox_Delphi 2007_Dbgrid - Fatal编程技术网

Delphi 选择dbgrid中的一行时,如何填充组合框?

Delphi 选择dbgrid中的一行时,如何填充组合框?,delphi,combobox,delphi-2007,dbgrid,Delphi,Combobox,Delphi 2007,Dbgrid,在Delphi2007中,我有一个DBGrid。当DBGrid中的一行被选中时,我需要填充一个组合框。组合框中的数据取决于选定的行,并且对于每个选定的行可以不同 DBGrid包含产品订单。当选择订单时,我需要一个组合框来填充订单中产品的批号。执行订单时,此批号保存在订单记录中 我找不到onSelect或onChange事件,我可以使用它来执行此操作 那么我该怎么做呢?你应该使用TDataSet.aftercroll event我建议双击事件(OnDblClick),当用户用鼠标点击并按Enter

在Delphi2007中,我有一个DBGrid。当DBGrid中的一行被选中时,我需要填充一个组合框。组合框中的数据取决于选定的行,并且对于每个选定的行可以不同

DBGrid包含产品订单。当选择订单时,我需要一个组合框来填充订单中产品的批号。执行订单时,此批号保存在订单记录中

我找不到onSelect或onChange事件,我可以使用它来执行此操作


那么我该怎么做呢?

你应该使用TDataSet.aftercroll event

我建议双击事件(OnDblClick),当用户用鼠标点击并按Enter键(key=#13)时捕捉该事件。

如果数据来自数据模块中的数据集,从@Roman的注释来看,你可以依赖TDataSource事件

如果您的数据源也位于datamodule中,则可以在表单本身中放置一个新的数据源(IMO是它所属的位置)

然后,使用“帮助”中的事件:

编写一个OnDataChange事件处理程序,以便在当前记录中的某个字段已编辑且应用程序移动到另一个字段时,或在关联数据集中的当前记录发生更改时,执行特定操作OnDataChange在必须同步不支持数据的控件中的数据显示的应用程序中特别有用。此事件通常用于确保控件反映数据集中的当前字段值,因为它是由所有更改触发的。
当链接数据集移动到新记录或刷新记录缓冲区时,字段参数为
nil
。当更改属于特定字段(用户或程序本身更改其值)时,该字段不是零。

这是一个查找表吗?内容是否来自另一个表?因为这是数据感知控件提供的常见场景。是的,内容来自另一个表。但是使用LookupComboBox(使用product_id查找批次号)会导致一个组合框,其中选择了所有项目(批次号),因为它们具有相同的产品id。我需要选择一个批次号,该id存储在TDataSet的订单记录+1中。在这些场景中,您几乎总是能够更好地使用和响应底层数据源和数据集,而不是使用GUI控件。然而,这带来了两个问题。首先,在datamodule中定义数据集。所以从那里进入组合框是很奇怪的。其次,该数据集还用于其他位置,对此我不需要这种行为。如果使用TDBComboBox,也可以将其相应的数据集(或ClientDataSet)放在DataModule中,并在Grid的dataset.OnAfterScroll事件中刷新。在这种情况下,我将在数据模块中定义一个通知程序对象,并从gui订阅它。notifier对象将允许任何人(或任何人)得到通知。-1通过鼠标和键盘执行此操作将很快成为一场噩梦,我打赌,99%的时间都会有组合框未正确更新的时间。