我似乎误解了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,它可能更适用于我正在寻找的内容。不过为什么不刷新工作?
感谢您的耐心等待。如果我需要更清楚,请告诉我。
答案 0 :(得分:16)
它只会在对象发生变化时刷新(例如,不同的查询),而不是数据。你可以这样做:
listBoxDays.DataSource = null;
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
刷新它......每次你需要的时候。
答案 1 :(得分:9)
Refresh():强制控件立即使其客户区无效 重绘自己和任何子控件。
刷新不会重新绑定您的控件,它只会导致重绘控件。您必须再次使用
设置DataSource
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
并重新绑定它。