ListBox已设置数据源但Refresh不执行任何操作

时间:2013-02-19 23:35:03

标签: c# database winforms datatable listbox-control

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

我想做什么:
我想在初始化窗体时加载列表框的数据(source = 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,它可能更适用于我正在寻找的内容。不过为什么不刷新工作?

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

2 个答案:

答案 0 :(得分:16)

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

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

刷新它......每次你需要的时候。

答案 1 :(得分:9)

  

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

刷新不会重新绑定您的控件,它只会导致重绘控件。您必须再次使用

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

并重新绑定它。

来源:Microsoft MSDN