C#中绑定SQL数据源的Chart从UserControl输入数据后如何自动刷新
自动刷新Chart控件的实现方案
你调用pharmacy_dbDataSet.Reset()不生效的核心原因是:该方法会清空数据集的表结构、关联关系和所有数据,不会主动从数据库拉取最新数据,也无法触发绑定源与Chart控件的更新逻辑,不适合用于刷新场景。
具体实现步骤
- 第一步:在Chart控件所属的主窗体中,封装一个公共的刷新方法,代码示例如下:
// 注意修改方法内的控件名、类名和你实际项目中的命名保持一致 public void RefreshMedicineStockChart() { // 清空原有旧数据 this.pharmacy_dbDataSet.medicineStocks.Clear(); // 重新从SQL数据库拉取最新的库存数据 this.medicineStocksTableAdapter.Fill(this.pharmacy_dbDataSet.medicineStocks); // 通知绑定源数据已更新,触发绑定控件同步 this.medicineStocksBindingSource.ResetBindings(false); // 强制Chart控件重新绑定数据并重绘 this.chart1.DataBind(); this.chart1.Refresh(); }
- 第二步:在所有输入数据的UserControl中,数据成功提交到SQL数据库后,调用上述刷新方法即可触发Chart更新。
如果UserControl直接挂载在主窗体下,可以通过父窗体实例调用,代码示例:
如果需要降低模块耦合,也可以在UserControl中自定义// 数据保存成功后执行以下代码,将【你的主窗体类名】替换为实际的窗体类名 if (this.ParentForm is 你的主窗体类名 mainForm) { mainForm.RefreshMedicineStockChart(); }DataSaved事件,主窗体订阅该事件,事件触发时执行刷新方法即可。
注意事项
- 必须确认UserControl中的数据已经成功执行SQL插入/更新语句写入数据库后,再调用刷新方法,否则拉取的还是旧数据
- 不要直接使用
DataSet.Reset()方法做刷新,会破坏数据集的预设结构,仅需要调用对应DataTable的Clear()方法清空旧数据即可
内容的提问来源于stack exchange,提问作者Roevic
相关产品推荐
相关产品推荐

