You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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直接挂载在主窗体下,可以通过父窗体实例调用,代码示例:
    // 数据保存成功后执行以下代码,将【你的主窗体类名】替换为实际的窗体类名
    if (this.ParentForm is 你的主窗体类名 mainForm)
    {
        mainForm.RefreshMedicineStockChart();
    }
    
    如果需要降低模块耦合,也可以在UserControl中自定义DataSaved事件,主窗体订阅该事件,事件触发时执行刷新方法即可。

注意事项

  • 必须确认UserControl中的数据已经成功执行SQL插入/更新语句写入数据库后,再调用刷新方法,否则拉取的还是旧数据
  • 不要直接使用DataSet.Reset()方法做刷新,会破坏数据集的预设结构,仅需要调用对应DataTable的Clear()方法清空旧数据即可

内容的提问来源于stack exchange,提问作者Roevic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 14:15:03