2017-02-26 70 views
0

我的程序假定根据组合框中选定的值过滤列表视图中的结果。问题:在更改参数后,listview没有被刷新。在运行时更改参数时刷新查询

procedure TForm1.ComboBox1Change(Sender: TObject); 
begin 
    //FDQuery1.ParamByName('paramA').AsString:=Combobox1.Selected.Text; 
    FDQuery1.Params[0].AsString:= Combobox1.Selected.Text; 
    FDQuery1.open; 
end; 

我已经尝试过FDQuery1.refresh没有成功。

Listview和参数在设计时正常工作。所选文字也存在。运行程序时不会显示错误消息,只是不刷新。

+1

您必须重新加载列表视图中的项目刷新查询后,请参阅:HTTP://stackoverflow.com/questions/16589670/tlistview-there-is-any-component-like-tlistview-but-with- DB访问。或者改用DbGrid。 –

+0

DBGrid是一个更好的选择。您可以模拟一个列表框,只有一列可见而没有列标题。然后,您将获得底层数据集的所有功能。另一种选择是在OnRefresh事件中编写代码来加载值,但这很麻烦。 –

+0

谢谢你们,现在使用DBGrid并且工作正常 –

回答

1

......这样?

FDQuery1.Close; 
    try 
    ListBox1.Clear; 
    FDQuery1.ParamByName('Param1').AsString:= Combobox1.Selected.Text; 
    FDQuery1.Prepare; 
    FDQuery1.Open; 
    while not FDQuery1.Eof do 
    begin 
     ListBox1.Items.Add(FDQuery1.FieldByName('Field1').AsString); 
     FDQuery1.Next; 
    end; 
    finally 
    FDQuery1.Close; 
    end;