【问题标题】:Plotting several lines in a Chart在图表中绘制多条线
【发布时间】:2017-06-30 04:27:22
【问题描述】:

我有 4 个单选按钮。它们中的每一个都对应于我想要使用的输入温度的一种类型(数据库中的列)。

我已经拥有了什么: 如果我选择一个单选按钮 + 按加载 - 它会绘制图表。如果我再次选择此按钮(或任何其他单选按钮),它会按照原始图形的顺序进行绘制。

我需要什么帮助: 我希望每次按下“加载”按钮时,这条线都会被“添加”到现有图表中。换句话说,我可能在同一个图中有 4 条不同的线,每条线代表我选择并按下“加载”的单选按钮。

代码:

private void BtnLoadDataToGraph_Click(object sender, EventArgs e)
{
    string column_to_use = "";
    double column_percentage_XX = 0;
    double column_percentage_XX = 0;
    string ReceiveNameFile = CboxReceiveNameFile.Text;


    if (RadioButtonStartXXTemp.Checked)
        column_to_use = "START_XX_TEMP";
    else if (RadioButtonStartXXTemp.Checked)
        column_to_use = "START_XX_TEMP";
    if (RadioButtonAvgTemp.Checked)
        column_to_use = "(START_XX_TEMP + START_XX_TEMP)/2";
    else
    {
        column_percentage_XX = Int32.Parse(TextBoxXXPercentage.Text);
        column_percentage_XX = (Convert.ToDouble(column_percentage_XX) / 100);

        column_percentage_XX = Int32.Parse(TextBoxXXPercentage.Text);
        column_percentage_XX = (Convert.ToDouble(column_percentage_XX) / 100);

        column_to_use = "(START_XX_TEMP*" + column_percentage_XX + ")+(START_XX_TEMP*" + column_percentage_XX + ")";
    }

    SqlConnection conDatabase = new SqlConnection("XXXXXX");
    SqlCommand cmdDatabase = new SqlCommand("select " + column_to_use + " AS temp,  SUBSTRING (header.TIME,CHARINDEX(' ',header.TIME,1),len(header.TIME)) as time,CONVERT(datetime,header.TIME,101) as new_time, REVERSE(SUBSTRING(REVERSE(fnames.PATH_NAME),0,CHARINDEX('\\\',REVERSE(fnames.PATH_NAME)))) as folder_name from TBL_DATA_TYPE_RO_HEADER header,TBL_FILE_NAMES fnames,TBL_PROGRAM program where program.PK_ID_TBL_PROGRAM = fnames.FK_ID_TBL_PROGRAM and fnames.PK_ID_TBL_FILE_NAMES = header.FK_ID_TBL_FILE_NAMES and REVERSE(SUBSTRING(REVERSE(fnames.PATH_NAME),0,CHARINDEX('\\\',REVERSE(fnames.PATH_NAME))))='" + ReceiveNameFile + "'  order by new_time", conDatabase);

    SqlDataReader myReader;

    try
    {
        conDatabase.Open();
        myReader = cmdDatabase.ExecuteReader();

        while (myReader.Read())
        {
            this.ChartTempVsTime.Series["TimeVsTemp"].Points.AddXY(myReader["time"].ToString(), myReader["temp"].ToString());
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
}

关于如何做到这一点的任何想法?我在想也许使用“Points.Aggregate”而不是“Points.AddXY”。但我不认为这是正确的路径,尤其是因为每个单选按钮应该有不同的颜色线。

欢迎任何帮助或提示!

【问题讨论】:

  • 不确定你想要什么,但也许你想要 4 个系列而不是只有 1 个?
  • 嘿@TaW,是的,我想在同一张图中有几行(几个值系列)
  • 好吧,然后添加更多系列并添加到他们各自的积分收藏中!这是相当直截了当的..
  • @TaW ,我的问题是,如果我按“加载数据”,它会创建一系列序列。换句话说,如果我按 3 次“加载数据”,则该系列将按顺序添加到图表中,而不是在同一个位置。为了更好地解释,如果我按 Load 2 次,我将在图表 2 中按顺序排列相同的系列(“将图表拆分为 2”)。我需要的是,当我按下加载时,它会将图表加载到与原件相同的位置。
  • 不确定我是否理解您的工作。 Sp far 我所看到的只是一个名为“TimeVsTemp”的系列,但是您需要更多,当然您应该在设置图表时只添加一次您想要的系列..

标签: c# mschart


【解决方案1】:

只需在图表中创建一个新系列并将新点添加到其中

【讨论】:

    【解决方案2】:

    this.ChartTempVsTime.Series["TimeVsTemp"].Points.AddXY(myReader["time"].ToString(), myReader["temp"].ToString());

    这条线总是将您的数据绘制在同一个系列上。每次按下加载按钮时,您都需要制作一个新系列。比如:

    private void BtnLoadDataToGraph_Click(object sender, EventArgs e)
    {
        try
        {
            string column_to_use = "";
            double column_percentage_XX = 0;
            double column_percentage_XX = 0;
            string ReceiveNameFile = CboxReceiveNameFile.Text;
    
    
            if (RadioButtonStartXXTemp.Checked)
                column_to_use = "START_XX_TEMP";
            else if (RadioButtonStartXXTemp.Checked)
                column_to_use = "START_XX_TEMP";
            if (RadioButtonAvgTemp.Checked)
                column_to_use = "(START_XX_TEMP + START_XX_TEMP)/2";
            else
            {
                column_percentage_XX = Int32.Parse(TextBoxXXPercentage.Text);
                column_percentage_XX = (Convert.ToDouble(column_percentage_XX) / 100);
    
                column_percentage_XX = Int32.Parse(TextBoxXXPercentage.Text);
                column_percentage_XX = (Convert.ToDouble(column_percentage_XX) / 100);
    
                column_to_use = "(START_XX_TEMP*" + column_percentage_XX + ")+(START_XX_TEMP*" + column_percentage_XX + ")";
            }
    
            SqlConnection conDatabase = new SqlConnection("XXXXXX");
            SqlCommand cmdDatabase = new SqlCommand("select " + column_to_use + " AS temp,  SUBSTRING (header.TIME,CHARINDEX(' ',header.TIME,1),len(header.TIME)) as time,CONVERT(datetime,header.TIME,101) as new_time, REVERSE(SUBSTRING(REVERSE(fnames.PATH_NAME),0,CHARINDEX('\\\',REVERSE(fnames.PATH_NAME)))) as folder_name from TBL_DATA_TYPE_RO_HEADER header,TBL_FILE_NAMES fnames,TBL_PROGRAM program where program.PK_ID_TBL_PROGRAM = fnames.FK_ID_TBL_PROGRAM and fnames.PK_ID_TBL_FILE_NAMES = header.FK_ID_TBL_FILE_NAMES and REVERSE(SUBSTRING(REVERSE(fnames.PATH_NAME),0,CHARINDEX('\\\',REVERSE(fnames.PATH_NAME))))='" + ReceiveNameFile + "'  order by new_time", conDatabase);
    
            SqlDataReader myReader;
    
            conDatabase.Open();
            myReader = cmdDatabase.ExecuteReader();
    
            Series s = new Series();
    
            while (myReader.Read())
            {
                s.Points.AddXY(myReader["time"].ToString(), myReader["temp"].ToString());
            }
    
            chart1.Series.Add(s);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      相关资源
      最近更新 更多