2017-06-28 8 views
0

Ich habe 4 Radiobuttons. Jeder von ihnen entspricht einem Typ (Spalten in der DB) der Eingangstemperatur, die ich verwenden möchte.Plotten mehrerer Linien in einem Diagramm

Was habe ich schon: Wenn ich einen Radio-Knopf wähle + lade - es zeichnet den Graphen auf. Wenn ich diesen Knopf (oder irgendeinen der anderen Radiobuttons) erneut wähle, zeichnet er in einer Sequenz des ursprünglichen Graphen.

Wozu brauche ich Hilfe bei: Ich möchte, dass jedes Mal, wenn ich den Knopf "Load" drücke, die Linie dem vorhandenen Graphen "hinzugefügt" würde. Mit anderen Worten, ich kann 4 verschiedene Linien in der gleichen Grafik haben, von denen jede auf Radiobutton, den ich ausgewählt habe, und drückte "Load".

Code:

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

Alle Ideen, wie kann ich dies tun? Ich dachte daran, vielleicht "Points.Aggregate" anstelle von "Points.AddXY" zu verwenden. Aber ich denke nicht, dass es der richtige Weg ist, besonders weil jeder Radiobutton eine andere Farblinie haben sollte.

Jede Hilfe oder Tipps sind willkommen!

+0

nicht sicher, was Sie wollen, aber vielleicht möchten Sie 4-Serie haben, anstelle von nur 1? – TaW

+0

Hey @TaW, ja, ich möchte in der gleichen Grafik mehrere Zeilen haben (mehrere Serien von Werten) –

+0

Nun, dann füge weitere Serien hinzu und füge zu ihren jeweiligen Points-Sammlungen hinzu! Das ist ziemlich einfach. – TaW

Antwort

0

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

Diese Linie wird immer Ihre Daten auf der gleichen Serie Plotten. Sie müssen bei jedem Drücken der Load-Taste eine neue Serie erstellen. Etwas wie:

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

einfach eine neue Serie in der Tabelle erstellen und fügen Sie die neuen Punkte in sie

Verwandte Themen