2017-06-28 2 views
0

4つのラジオボタンがあります。それらのそれぞれは、使用したい入力温度の1つのタイプ(DB内の列)に対応しています。グラフに複数行をプロットする

私はすでに持っているもの: ラジオボタンを1つ選択し+ Loadを押すとグラフがプロットされます。もう一度このボタン(または他のラジオボタン)を選択すると、元のグラフのシーケンスでプロットされます。

私は助けが必要です: "Load"ボタンを押すたびに、そのラインは既存のグラフに "追加"されます。言い換えれば、同じグラフに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.AddXYの代わりに "Points.Aggregate"を使うことを考えていました。しかし、私はそれが正しい経路だとは思っていません。なぜなら、それぞれのラジオボタンには異なる色の線があるからです。

どのようなヘルプやヒントも大歓迎です!

+0

それに新しいポイントを追加していないが、おそらくあなたの代わりに1つだけの4シリーズを持っていたいですか? – TaW

+0

ちょっと@TaW、はい、私は同じグラフにいくつかの行(値のいくつかのシリーズ)を持っています –

+0

さて、さらにシリーズを追加し、彼らのrespetiveポイントコレクションに追加!これはむしろまっすぐです.. – TaW

答えて

0

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); 
    } 
} 
0

ちょうどグラフの新シリーズを作成し、あなたが望むことを確認

関連する問題