gpt4 book ai didi

c# - 如何为 System.Windows.Forms.DataVisualization.Charting 在 X 轴上设置日期时间范围?

转载 作者:IT王子 更新时间:2023-10-29 04:30:20 41 4
gpt4 key购买 nike

目前,我正在尝试使用 Windows 窗体显示图表,该图表在 X 轴上显示每月数据,在 Y 轴上显示整数值;但是,我没有为 X 轴正确设置范围,其中 MonthYear 是一个日期时间:

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

问题是,显示图表时,X 轴的日期时间为“1900-01-01”,所以我的问题是,如何将日期范围设置为从 2013-01-01 开始?

请注意,我已经在互联网上搜索并尝试了以下设置,但它们没有给我正确的范围:

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

或者,

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

或者,

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

TIA。

更新:请注意,我发现了如何使用这个正确设置范围:

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

上面的代码现在为 X 轴设置了合适的范围;然而,现在图表本身是空白的。

更新 2:

是的,谢谢 DasKrumelmonster——修复了它!我使用的代码来自 http://www.codeproject.com/Articles/168056/Windows-Charting-Application ,并且应该更仔细地查看作者的 protected 内部 Chart GenerateChart(DataTable dtChartDataSource, int width, int height, string bgColor, int intType) 函数。为了纠正这个问题,我更改了这些行:

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

对此:

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

谢谢!

最佳答案

无法重现。我试过这段代码:

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.Add(new ChartArea()); // In some cases the winforms designer adds this already
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();
}

也许我在途中修正了你的错误。

它按预期工作:一行有四个数据点,所有 x 轴标签都是可见的,图形本身也是如此。如果仍然存在问题,请提供完整的测试代码以及​​应该发生什么与实际发生什么的描述。

关于c# - 如何为 System.Windows.Forms.DataVisualization.Charting 在 X 轴上设置日期时间范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15907556/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com