6

我似乎误解了 ListBox.Refresh() 方法,我希望有人能帮助我。

我正在尝试做的事情:
我想在 Windows 窗体初始化时加载列表框的数据(源 = sql 数据库的表)。此外,当用户将数据添加到数据库时,我希望更新列表框。

逻辑:
我有一个 sql 数据库作为我的源,它设置为:

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;

DBquery.informationRetreval() 是我的 DBQuery 静态类中的静态方法。它所做的只是从数据库中建立一个表,然后返回该表。

我在与 initializeComponent 相同的方法中设置数据源(因此我的列表框将加载现有数据):

public Settings()
    {
        InitializeComponent();
        listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
    }

当用户添加更多数据时:我调用一个将数据添加到数据库的方法,然后调用:

    listBoxDays.Refresh(); //update listbox

问题:这不会更新列表框。初始化我的列表框后,数据将填充,但之后不会更改(因此刷新不起作用)。这是为什么?我可以再次设置 DataSource,但这感觉很草率。在查看了一些文档后,我注意到事件处理程序 DataSourceChanged 可能更适合我正在寻找的内容。尽管如此,为什么不刷新工作?

感谢您的耐心等待。如果我需要更清楚,请告诉我。

4

2 回答 2

16

它只会在对象发生变化时刷新(例如,不同的查询),而不是数据。你可以这样做:

listBoxDays.DataSource = null;
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;

刷新它......每次你需要。

于 2013-02-19T23:49:02.453 回答
9

Refresh():强制控件使其客户区无效并立即重绘自身和任何子控件。

刷新不会重新绑定您的控件,它只会导致控件被重绘。您将不得不DataSource再次设置

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;

并重新绑定它。

资料来源:微软 MSDN

于 2013-02-19T23:43:29.617 回答