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)
刷新它......每次你需要的时候.
Refresh():强制控件使其客户区无效并立即重绘自身和任何子控件.
刷新不会重新绑定您的控件,它只会导致重绘控件.您将不得不DataSource再次设置
listBoxDays.DataSource = DBQuery.informationRetreval().DefaultView;
Run Code Online (Sandbox Code Playgroud)
并重新绑定它.