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

S1r*_*lot 6 c# database datatable listbox-control winforms

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


我想做的是:我想在初始化窗体时加载一个列表框的数据(source = sql数据库的表).此外,当用户将数据添加到数据库时,我希望列表框能够更新.

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

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
Run Code Online (Sandbox Code Playgroud)

DBquery.informationRetreval()是我的DBQuery静态类中的静态方法.它只是从数据库中设置一个表,然后返回表.

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

public Settings()
    {
        InitializeComponent();
        listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
    }
Run Code Online (Sandbox Code Playgroud)

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

    listBoxDays.Refresh(); //update listbox
Run Code Online (Sandbox Code Playgroud)

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

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

Ran*_*s1r 16

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

listBoxDays.DataSource = null;
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
Run Code Online (Sandbox Code Playgroud)

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

  • 大!我不知道为什么要这样做 (2认同)

Han*_*año 9

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

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

listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
Run Code Online (Sandbox Code Playgroud)

并重新绑定它.

来源:Microsoft MSDN