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

Windows Forms中C# SQL查询覆盖Chart各Series数据的原因

解决Chart控件Series数据被覆盖的问题

问题出在你给整个Chart控件设置了DataSource并调用DataBind()——这会让Chart下所有Series共享同一个数据源。当你执行第二个方法时,新的数据源会覆盖Chart的全局数据源,导致所有Series都使用最后一次查询的结果。

要解决这个问题,不需要给整个Chart设置数据源,而是单独为每个Series指定数据源并绑定,修改后的代码如下:

修改getDataA方法:

public static void getDataA(Chart chart, string wc)
{
    string commandSql = "SELECT TOP 8 Example1, Example2, Example3, Example4 FROM ***** WHERE Example5 = @wc AND Example6 = 'A' ORDER BY Example7 Desc";
    // 使用using自动释放连接资源
    using (SqlConnection conn = new SqlConnection("Data Source = ****; Initial Catalog = ****; Integrated Security = True"))
    {
        SqlDataAdapter da = new SqlDataAdapter();
        SqlCommand cmd = new SqlCommand(commandSql, conn);
        cmd.Parameters.AddWithValue("wc", wc);
        da.SelectCommand = cmd;
        DataSet ds = new DataSet();

        conn.Open();
        da.Fill(ds);

        // 仅为当前Series设置数据源,而非整个Chart
        chart.Series[0].DataSource = ds.Tables[0];
        chart.Series[0].XValueMember = "Production_Hour";
        chart.Series[0].YValueMembers = "Cuts";
        // 只绑定当前Series
        chart.Series[0].DataBind();
    }
}

修改getDataB方法:

同理,将chart.Series[1]的数据源设置为查询B的数据集,并单独调用该Series的DataBind():

public static void getDataB(Chart chart, string wc)
{
    string commandSql = "SELECT TOP 8 Example1, Example2, Example3, Example4 FROM ***** WHERE Example5 = @wc AND Example6 = 'B' ORDER BY Example7 Desc";
    using (SqlConnection conn = new SqlConnection("Data Source = ****; Initial Catalog = ****; Integrated Security = True"))
    {
        SqlDataAdapter da = new SqlDataAdapter();
        SqlCommand cmd = new SqlCommand(commandSql, conn);
        cmd.Parameters.AddWithValue("wc", wc);
        da.SelectCommand = cmd;
        DataSet ds = new DataSet();

        conn.Open();
        da.Fill(ds);

        chart.Series[1].DataSource = ds.Tables[0];
        chart.Series[1].XValueMember = "Production_Hour";
        chart.Series[1].YValueMembers = "Cuts";
        chart.Series[1].DataBind();
    }
}

关键说明:

  • 移除chart.DataSource = ds.Tables[0];和chart.DataBind();,避免全局覆盖所有Series的数据源
  • 为每个Series单独指定DataSource并调用DataBind(),确保每个Series只使用自己的查询结果
  • 用using包裹SqlConnection,自动释放数据库连接资源(可选但推荐,避免资源泄漏)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:00:49