Comment définissez-vous la plage DateTime sur l’axe X pour System.Windows.Forms.DataVisualization.Charting?

Actuellement, je tente d’afficher un graphique à l’aide de formulaires Windows affichant des données mensuelles sur l’axe des X et une valeur entière sur l’axe des Y; Cependant, je ne configure pas correctement la plage pour l’axe X, où MonthYear est un DateTime:

var pnChart = new System.Windows.Forms.Panel(); pnChart.Controls.Clear(); DataTable dtChartData = myDatabaseLayer.BuildDataTable("SELECT Added, Modified FROM tblStatistics WHERE ApplicationID = " + intApplicationID + " ORDER BY MonthYear"); Chart chart = GenerateChart(dtChartData, pnChart.Width, pnChart.Height, "ActiveBorder", 6); chart.Series[0].XValueType = ChartValueType.DateTime; chart.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd"; chart.ChartAreas[0].AxisX.Interval = 1; chart.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Months; chart.ChartAreas[0].AxisX.IntervalOffset = 1; pnChart.Controls.Add(chart); 

Le problème est que, lorsque le graphique est affiché, l’axe des X a la date et l’heure “1900-01-01”. Ma question est donc de savoir comment définir la plage de dates à partir du 01/01/2013.

Veuillez noter que j’ai effectué des recherches sur Internet et essayé les parameters suivants, mais ils ne me donnent pas la plage correcte:

 chart.ChartAreas[0].AxisX.Maximum = DateTime.Now.Ticks; 

Ou,

 chart.ChartAreas[0].AxisX.Crossing = DateTime.Now.Ticks; 

Ou,

 chart.ChartAreas[0].AxisX.Minimum = DateTime.Now.Ticks; 

TIA.

UPDATE: Veuillez noter que j’ai trouvé comment régler correctement la plage en utilisant ceci:

  chart.Series[0].XValueType = ChartValueType.DateTime; DateTime minDate = new DateTime(2013, 01, 01); DateTime maxDate = DateTime.Now; chart.ChartAreas[0].AxisX.Minimum = minDate.ToOADate(); chart.ChartAreas[0].AxisX.Maximum = maxDate.ToOADate(); 

Le code ci-dessus définit la plage appropriée pour l’axe X; Cependant, le graphique lui-même est vide.

MISE À JOUR 2:

Oui, merci DasKrumelmonster – ça a réglé le problème! J’utilisais le code de http://www.codeproject.com/Articles/168056/Windows-Charting-Application , et j’aurais simplement dû examiner de plus près le graphique interne protégé de l’auteur GenerateChart (DataTable dtChartDataSource, int largeur, int hauteur, chaîne) bgColor, int intType). Pour corriger le problème, j’ai changé ces lignes:

 foreach (DataRow dr in dtChartDataSource.Rows) { double dataPoint = 0; double.TryParse(dr[dc.ColumnName].ToSsortingng(), out dataPoint); DataPoint objDataPoint = new DataPoint() { AxisLabel = "series", YValues = new double[] { dataPoint } }; chart.Series[series].Points.Add(dataPoint); } 

Pour ça:

 DateTime dtStart = new DateTime(2013, 01, 01); int intMonthCounter = 0; //Add data points to the series foreach (DataRow dr in dtChartDataSource.Rows) { double dataPoint = 0; double.TryParse(dr[dc.ColumnName].ToSsortingng(), out dataPoint); DataPoint objDataPoint = new DataPoint() { AxisLabel = "series", YValues = new double[] { dataPoint } }; chart.Series[series].Points.AddXY(dtStart.AddMonths(intMonthCounter), dataPoint); intMonthCounter++; } 

Je vous remercie!

Ne peut pas reproduire. J’ai essayé ce code:

 private void button1_Click(object sender, EventArgs e) { var s = new Series(); s.ChartType = SeriesChartType.Line; var d = new DateTime(2013, 04, 01); s.Points.AddXY(d, 3); s.Points.AddXY(d.AddMonths(-1), 2); s.Points.AddXY(d.AddMonths(-2), 1); s.Points.AddXY(d.AddMonths(-3), 4); chart1.Series.Clear(); chart1.Series.Add(s); chart1.Series[0].XValueType = ChartValueType.DateTime; chart1.ChartAreas[0].AxisX.LabelStyle.Format = "yyyy-MM-dd"; chart1.ChartAreas[0].AxisX.Interval = 1; chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Months; chart1.ChartAreas[0].AxisX.IntervalOffset = 1; chart1.Series[0].XValueType = ChartValueType.DateTime; DateTime minDate = new DateTime(2013, 01, 01).AddSeconds(-1); DateTime maxDate = new DateTime(2013, 05, 01); // or DateTime.Now; chart1.ChartAreas[0].AxisX.Minimum = minDate.ToOADate(); chart1.ChartAreas[0].AxisX.Maximum = maxDate.ToOADate(); } 

J’ai peut-être corrigé votre erreur en chemin.

Cela fonctionne comme prévu: une ligne avec quatre points de données, toutes les étiquettes des axes x sont visibles, de même que le graphique lui-même. Si le problème persiste, veuillez fournir le code de test complet ainsi qu’une description de ce qui devrait se produire et de ce qui se produit réellement