C# C Win窗体自动更新控件

C# C Win窗体自动更新控件,c#,winforms,datagridview,combobox,auto-update,C#,Winforms,Datagridview,Combobox,Auto Update,我有一个datagridview和一个组合框,可以随机填充数据。但是,新数据从未自动显示。有人提到了使控件无效的想法,以强制应用程序重新绘制它,从而迭代内容并用新数据填充控件 有人知道在windows窗体应用程序中实现自动更新控件的最佳方法吗 非常感谢您的帮助 问候。我想您使用数据绑定? 您在自定义对象上使用数据绑定吗 在这种情况下,类必须实现INotifyPropertyChanged接口。通常设置datagridview的datasource属性就足以使datagridview自身无效并重新

我有一个datagridview和一个组合框,可以随机填充数据。但是,新数据从未自动显示。有人提到了使控件无效的想法,以强制应用程序重新绘制它,从而迭代内容并用新数据填充控件

有人知道在windows窗体应用程序中实现自动更新控件的最佳方法吗

非常感谢您的帮助


问候。

我想您使用数据绑定? 您在自定义对象上使用数据绑定吗


在这种情况下,类必须实现INotifyPropertyChanged接口。

通常设置datagridview的datasource属性就足以使datagridview自身无效并重新绘制。有时我会想起,我可能必须先设置datagridview.datasource=null,然后再次设置datasource以进行更新。

如果使用BindingSource,BindingSource.ResetBindings方法可能会帮助您。

有时,使控件无效并不总是有效。由于WM_绘制,底层windows消息是消息队列中优先级最低的消息之一。因此,如果绘制请求过于频繁,Windows将忽略这些请求。这是我们在停止响应的应用程序中看到只有边框的白色窗口的另一个原因。 要避免这种情况,请致电 应用程序.DoEvents;
这将迫使队列处理所有事件,包括重新绘制的请求。

如果您谈论的是一个从应用程序外部的数据库填充数据的控件,则除非您重新查询数据库,否则该控件无法知道数据已更改


另一方面,如果您的应用程序本身正在进行数据更改,那么您可以实现INotifyPropertyChanged接口,这意味着您可以拥有一个PropertyChanged事件,您的控件可以对该事件作出反应,以便在发生更改时更新。下面的页面有一个实现此功能的示例:

datagridview和combobox由xml文档中的数据填充。是否仍然可以实现INotifyPropertyChanged接口以允许自动更新?仅当XML文档是从应用程序中保存/生成的。如果它来自一个外部来源,那么你必须积极地监测它的变化。如果XML文档是一个文件,那么可以使用FileSystemWatcher控件定期测试它是否被修改,然后让控件重新加载它。