作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要在 MSChart 中格式化时间轴的标签,例如“CW21”、“CW22”……我苦苦挣扎了一段时间,但还没有找到任何解决方案。
有一个 LabelStyle.Format
属性,但这不支持(据我所知)日历周。它使用 DateTime 格式化字符串。有没有办法引入自定义格式化程序?
在框架中我找到了 Calendar.GetWeekOfYear
方法,这将为我提供正确的周数。现在的问题是如何将它们组合在一起?
是否有任何好的策略以通用方式在轴上设置自己的标签? (事先不知道轴的最小/最大点)
最佳答案
是的,您可以使用 Chart.FormatNumber事件例如:
private void FillChart()
{
// register the format event
this.chart1.FormatNumber += new EventHandler<FormatNumberEventArgs>(chart1_FormatNumber);
// fill the data table with values
DataTable dt = new DataTable();
dt.Columns.Add("X", typeof(DateTime));
dt.Columns.Add("Y", typeof(double));
dt.Rows.Add(DateTime.Today.AddDays(1), 10);
dt.Rows.Add(DateTime.Today.AddDays(8), 30);
dt.Rows.Add(DateTime.Today.AddDays(15), 10);
dt.Rows.Add(DateTime.Today.AddDays(21), 20);
dt.Rows.Add(DateTime.Today.AddDays(25), 40);
dt.Rows.Add(DateTime.Today.AddDays(31), 25);
// bind the data table to chart
this.chart1.Series.Clear();
var series = this.chart1.Series.Add("Series 1");
series.XValueMember = "X";
series.YValueMembers = "Y";
series.ChartType = SeriesChartType.Line;
this.chart1.DataSource = dt;
this.chart1.DataBind();
// set a custom format to recognize the AxisX label in the event handler
this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "CustomAxisXFormat";
}
void chart1_FormatNumber(object sender, FormatNumberEventArgs e)
{
if (e.ElementType == ChartElementType.AxisLabels &&
e.Format == "CustomAxisXFormat")
{
if (e.ValueType == ChartValueType.DateTime)
{
var currentCalendar = CultureInfo.CurrentCulture.Calendar;
e.LocalizedValue = "CW" +
currentCalendar.GetWeekOfYear(DateTime.FromOADate(e.Value),
System.Globalization.CalendarWeekRule.FirstDay,
CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek);
}
}
}
结果如下:
关于c# - MsChart:如何将日历周数显示为 X 轴上的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009113/
我是一名优秀的程序员,十分优秀!