列表框不显示对数据集所做的更改

Listbox does not show the changes made to the Dataset

我有一个通过 LiveBindings 连接到 ClientDataset 的 FMX ComboBox。一切正常,直到我需要从 ClientDataset 过滤数据。应用过滤器后,ComboBox.Items和ComboBox.ListItems都可以,即是过滤后的ClientDataset中包含的数据。但是 ComboBox 列表框显示的数据总是相同的:第一次显示列表框时 ClientDataset 包含的数据。

procedure TForm14.Button1Click(Sender: TObject);
begin
  LinkFillControlToField1.Active := False;
  ClientDataset1.Filter := 'TYPE = ''N''';
  Clientdataset1.Filtered := not ClientDataset1.Filtered;
  // Deactivate and Reactivate the link is necessary to refresh the data
  LinkFillControlToField1.Active := True;
end;

在该代码中,我将过滤器更改为 ClientDataset 并停用 LinkFillControlToField,在应用过滤器后,我再次激活它以刷新数据。它在 TListBox 和其他控件上没有问题,但在 TComboBox 上没有问题,虽然 ComboBox.Items 和 ComboBox.ListItems 确实包含正确的数据,但它不是组合框列表框中显示的数据。

有没有办法使用 LiveBindings 解决这个问题?我已经寻找 ComboBox(例如 Repaint)、LinkFillControlToField 和 BindSourceDB 的属性和方法,但对我来说没有任何效果。

我在 Windows 10.Windows 上使用 Delphi 10.4 Update 2,Firemonkey Windows 应用程序(32 或 64)运行。

TIA.,

里卡多

我遇到了同样的问题。我的数据源是 TFireDAC TQuery。我提交了对查询中包含的 parma 的更改。 我的问题解决方案是插入一行以明确清除项目列表。

if (SCM != NULL && SCM->qrySession->Active) {
    SCM->qrySession->DisableControls();
    // remove all the strings held in the combobox
    // note cmbSessionList->Clear() doesn't work here.
    cmbSessionList->Items->Clear();
    SCM->qrySession->Close();
    // ASSIGN PARAM to display or hide CLOSED sessions
    SCM->qrySession->ParamByName("HIDECLOSED")->AsBoolean = fHideClosedSessions;
    SCM->qrySession->Prepare();
    SCM->qrySession->Open();
    SCM->qrySession->EnableControls();
}