c# - MsChart:如何将日历周数显示为 X 轴上的标签?

标签 c# .net format mschart

我需要在 MSChart 中格式化时间轴的标签,例如“CW21”、“CW22”……我苦苦挣扎了一段时间,但还没有找到任何解决方案。

  1. 有一个 LabelStyle.Format 属性,但这不支持(据我所知)日历周。它使用 DateTime 格式化字符串。有没有办法引入自定义格式化程序?

  2. 在框架中我找到了 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);
        }
    }
}

结果如下:

enter image description here

关于c# - MsChart:如何将日历周数显示为 X 轴上的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7009113/

相关文章:

php 货币格式

c# - 将 EasyNetQ 用于 RabbitMQ 时自定义错误队列名称?

.net - 将表变量从 C# 传递到 SQL Server 传递空表

Excel:格式 TODAY()/DATE

c# - 拖放效果.滚动 : why -2147483648 not 8?

c# - 序列化和反序列化多种类型的对象

c - 数据类型和格式说明符

c# - 为什么 Visual Studio 不警告我空引用异常?

c# - 根据标题长度调整窗口大小。

c# - Linq 包含对字符串的检查有误检测