Obecnie próbuję wyświetlić wykres przy użyciu formularzy okien, które pokazuje miesięczne dane na osi X i liczbę całkowitą na osi Y; Jednak nie jestem ustawieniu zakresu odpowiednio dla osi x, gdzie MonthYear jest DateTime:Jak ustawić zakres DateTime na osi X dla System.Windows.Forms.DataVisualization.Charting?
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);
Problem jest, gdy wyświetlany jest wykres, oś X ma datetime „1900-01-01” więc moje pytanie brzmi: jak ustawić zakres dat na początek 2013-01-01?
Uwaga Przeszukałem internet i próbował następujące ustawienia, ale oni nie dają mi prawidłowy zakres:
chart.ChartAreas[0].AxisX.Maximum = DateTime.Now.Ticks;
Albo
chart.ChartAreas[0].AxisX.Crossing = DateTime.Now.Ticks;
Albo
chart.ChartAreas[0].AxisX.Minimum = DateTime.Now.Ticks;
TIA.
UPDATE: Należy pamiętać, że znalazłem sposób ustawić zakres właściwie to przy użyciu:
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();
Powyższy kod ustawia odpowiedni zakres teraz na osi X; jednak sam wykres jest pusty.
UPDATE 2:
Tak, dziękuję DasKrumelmonster - że stała się! Używałem kodu z http://www.codeproject.com/Articles/168056/Windows-Charting-Application i po prostu powinienem przyjrzeć się bliżej funkcji chronionej przez autora wewnętrznej funkcji Chart GenerateChart (DataTable dtChartDataSource, int width, int height, string bgColor, int intType). Aby rozwiązać ten problem, zmieniłem te linie:
foreach (DataRow dr in dtChartDataSource.Rows)
{
double dataPoint = 0;
double.TryParse(dr[dc.ColumnName].ToString(), out dataPoint);
DataPoint objDataPoint = new DataPoint() { AxisLabel = "series", YValues = new double[] { dataPoint } };
chart.Series[series].Points.Add(dataPoint);
}
do tego:
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].ToString(), out dataPoint);
DataPoint objDataPoint = new DataPoint() { AxisLabel = "series", YValues = new double[] { dataPoint } };
chart.Series[series].Points.AddXY(dtStart.AddMonths(intMonthCounter), dataPoint);
intMonthCounter++;
}
dziękuję!
Skopiowano to w celu przetestowania. Nie widać żadnego wyniku. Obszar wykresu jest pusty. – C4u
Interesujące. Po prostu spróbowałem ponownie i działa to dla mnie. 1) Utwórz nowy projekt WindowsForms. 2. Upuść przycisk i System.Windows.Forms.DataVisualization.Charting.Chart w formularzu 3) kliknij dwukrotnie przycisk, aby utworzyć procedurę obsługi zdarzenia 4) wstaw kod z powyższej 5) uruchom i ciesz się. Możesz dostosować maksymalny limit. –
Hah. Dokładnie tak, jak próbowałem. Wygląda na to, że jest to dla mnie szczególny problem, ponieważ zadziałało dla twórcy wątków. W każdym razie, przegłosowałem to. Niektóre części były naprawdę pomocne. Mam teraz działający kod. – C4u