我有一个FMX ComboBox通过LiveBindings连接到ClientDataset。一切正常,直到我需要从ClientDataset中过滤数据。应用滤镜后,组合框。项和组合框。listtitem是可以的,也就是说,它是过滤后的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)上没有问题。项和组合框。ListItems确实包含正确的数据,但它不是在组合框列表框中显示的数据。
是否有办法解决这个问题,使用LiveBindings ?我已经寻找了ComboBox的属性和方法(例如Repaint), LinkFillControlToField和BindSourceDB,但没有什么对我有效。
我使用Delphi 10.4 Update 2, Firemonkey Windows应用程序(32或64)在Windows 10上运行。
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();
}