Benutzer mit den meisten Antworten
Chart.Series Checkbox-gesteuert an- und abschalten

Frage
-
Hallo zusammen,
ich habe in meiner Windows-Form eine ComboBox zur Auswahl einer Station, zwei DateTimePicker zum festlegen eines Zeitraums, einen Button zum Anzeigen, einen Chart
und 3 CheckBoxes, mit deren Hilfe die Series im Chart ein und ausgeblendet werden sollen.
Leider habe ich genau damit ein Problem. Mit dem folgenden Code erhalte ich immer den Fehler "Ein Diagrammelement mit dem Namen 'Temp' konnte in 'SeriesCollection' nicht gefunden werden." Lasse ich den Else-Zweig der If-Bedingung weg, wird das Programm ausgeführt, jedoch kann ich die Series zwar ausblenden aber nicht wieder einblenden. Der Ausgangszustand der CheckBox ist 'Checked'.
Ich verstehe nicht, warum das Programm auf einen Fehler läuft, zu dem Zeitpunkt des Ausführens soll der Zustand der CheckBox doch noch gar nicht abgefragt werden, sondern nur wenn sich der Zustand ändert!?
Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Me.tblwetterTableAdapter.Fill(Me.DataSet.tblwetter) tblwetterBindingSource.Filter = String.Format("station Like '*" & CStr(ComboBox1.SelectedItem) & "*' and datum >= '" & DatumDateTimePicker.Value.ToShortDateString & "' and datum <= '" & DatumDateTimePicker1.Value.ToShortDateString & "'") Chart1.Series("Temp").Color = Color.Green Chart1.Series("Druck").Color = Color.Red Chart1.Series("Feuchte").Color = Color.Blue Chart1.DataBind() Chart1.Visible = True End Sub Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click tblwetterBindingSource.Filter = String.Format("station Like '*" & CStr(ComboBox1.SelectedItem) & "*' and datum >= '" & DatumDateTimePicker.Value.ToShortDateString & "' and datum <= '" & DatumDateTimePicker1.Value.ToShortDateString & "'") Chart1.DataBind() Chart1.Visible = True Try Me.tblwetterTableAdapter.OrderByDatum(Me.DataSet.tblwetterDaily) Catch ex As System.Exception System.Windows.Forms.MessageBox.Show(ex.Message) End Try End Sub
Private Sub CB_Temp_CheckedChanged(sender As Object, e As EventArgs) Handles CB_Temp.CheckStateChanged If CB_Temp.Checked = False Then Chart1.Series("Temp").Enabled = False Else Chart1.Series("Temp").Enabled = True End If End Sub End Class
Und ein zweites Problem habe ich noch: Wenn ich die Series per CheckBox ausschalte, verschwinden auch die Bezeichnungen meiner X-Achse, schalte ich die Series wieder zu, werden die Bezeichnungen wieder eingeblendet - woran liegt das?
Vielen Dank für jede Hilfe!
Alex
- Bearbeitet Fischer, Alexander Donnerstag, 26. März 2015 07:09
Antworten
-
Hallo Alex,
bau eine Fehlerbehandlung ein (Try ... Catch ... oder mit Prüfung, ob die Series vorhanden ist). Das setzen der Checkboxen auf Checked = False kannst Du ja auch in Form_Load durchführen, dann sollten die Chart Element vorhanden sein, da Du die dort ja auch ansprichst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Fischer, Alexander Donnerstag, 26. März 2015 13:38
Alle Antworten
-
Hallo Alex,
in der Regel kommt dieser Fehler, wenn das Element nicht vorhanden ist. Siehe dazu auch:
https://www.google.de/#q=a chart element with the name could not be found in the 'seriescollection'
Ich würde daher mal probieren, "Temp" nochmal per
Chart1.Series.Add( <ZwischengespeicherteSeries> )
hinzuzufügen. Also vor dem Deaktivieren "Temp" in eine Variable oder Eigenschaft (auf Klassenebene) zwischenspeichern und dann beim Reaktivieren wieder hinzufügen.
Eigentlich sollte das nicht notwendig sein aber da Du diesen Fehler erhältst, wäre es wohl einen Versuch wert. Ich habe das mal (mit statischen Werten und zwei Series im Chart) nachgebaut, da konnte ich weder das eine noch das andere Verhalten, das Du geschildert hast, nachvollziehen.
Frage: Welche Visual Studio Version verwendest und mit welcher .NET Framework arbeitest Du?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
- Bearbeitet Stefan FalzModerator Donnerstag, 26. März 2015 09:20
-
Hallo Stefan,
danke für deine Antwort!
Ich nutze MS VS Express 2013 für Windows Desktop mit dem .Net Framwork 4.5.
Beim Versuch die Series "Temp" nochmal dem Chart1 hinzuzufügen ergab den Fehler: Ein Diagrammelement mit dem Namen 'Temp' ist bereits in 'SeriesCollection' vorhanden. -.-
-
Hallo Alexander,
bzgl. der von dir verwendeten Express Edition der Hinweis, dass man mittlerweile eine erheblich bessere Variante kostenlos erhalten kann, die Community Edition. Die bietet erheblich mehr Funktionalität (entspricht technisch in etwa der Professional Edition). Ggfs. mal darüber nachdenken, diese zu verwenden, damit machst Du dir das Entwicklerleben an vielen Stellen leichter. (Hat aber mit dem bei dir auftretenden Fehler nichts zu tun).
https://www.visualstudio.com/products/visual-studio-community-vs
Dein Problem kann ich allerdings so oder so leider nicht nachvollziehen. Es wäre daher sehr hilfreich, wenn Du ein Beispielprojekt (bitte aufs absolut notwendigste reduziert) erstellen und zum Download bereitstellen könntest. Dann kann ich mal schauen, ob es mit deinem Projekt reproduzierbar ist und prüfen, ob ich eine Ursache/Lösung finden kann.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Danke für das Angebot,
leider kann ich das Projekt nicht hochladen, da es eine Datenbankanbindung enthält, deren vertraulichen Daten im Projekt gespeichert sind.
Ich habe mir im Debug-Modus mal an verschiedenen Stellen die Anzahl der im Chart1 gespeicherten Series ausgeben lassen. Im Sub Form1_Load sind zu jedem Zeitpunkt alle Series vorhanden. Nur in der Sub CB_Temp_CheckedChanged sind keine Series enthalten. Komisch ist auch - und das ist wohl auch der Grund - dass diese Sub CB_Temp_CheckedChanged als allererstes ausgeführt wird, obwohl doch noch gar kein Statuswechsel der CheckBox stattgefunden hat...
*Edit: Wenn ich den Status der CheckBox auf Checked = False festsetze, funktioniert das Programm. Dann wird auch die Sub CB_Temp_CheckedChanged nicht als erstes ausgeführt. Allerdings habe ich dann beim Start des Programms eine unchecked CB bei angezeigter Series -.- was ja auch nicht Sinn der Sache sein kann...
- Bearbeitet Fischer, Alexander Donnerstag, 26. März 2015 12:44
-
Hallo Alex,
bau eine Fehlerbehandlung ein (Try ... Catch ... oder mit Prüfung, ob die Series vorhanden ist). Das setzen der Checkboxen auf Checked = False kannst Du ja auch in Form_Load durchführen, dann sollten die Chart Element vorhanden sein, da Du die dort ja auch ansprichst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert Fischer, Alexander Donnerstag, 26. März 2015 13:38
-
Hallo Stefan,
das hat wunderbar funktioniert! Danke! Jetzt kann ich jede meiner Series einwandfrei zu- und abschalten :)
Zu meinem zweiten Problem, dass die Bezeichnung der X-Achse verschwindet, wenn ich eine Series abschalte habe ich festgestellt, dass es nur die Series(0) betrifft. Als ob die Darstellung der Achs-Bezeichnung an dieser Series hängen würde. Schalte ich Series(1) oder (2) ab, bleibt die Bezeichnung erhalten.
Ich habe die Series(0) schon gelöscht und neu erstellt aber der Effekt bleibt.
-
Ich konnte das Problem nun zum Teil lösen, in dem ich den Wert "IntervallAutoMode" der X-Achse (die Zeitachse) von FixedCount auf VariableCount gestellt habe. Dadurch verschwindet die Achsbezeichnung (inklusive Grid) nicht mehr beim Ausblenden der Series(0).
Allerdings habe ich nun Probleme bei der Intervall-Darstellung der x-Achse, die ändert sich mit zu und abschalten der series, obwohl alle series den gleichen Wertebereich haben.