Подтвердить что ты не робот

Форматирование оси управления MS Chart

Я использую MS Chart Control в приложении Winforms, которое я пишу. Компонент оси X графика рассеяния, который я показываю, представляет собой данные Int64, которые в конечном итоге представляют время UTC. Я хотел бы взять данные Int64 и по существу сделать DataTime.FromFileTimeUTC(theTime).ToString() на нем, чтобы показать метки X-оси конечного пользователя, которые имеют смысл.

В настоящее время я создаю еще один столбец в DataTable в памяти для хранения эквивалента DateTime этого Int64, например:

dataTable.Columns.Add("mytimestamp");
foreach (DataRow dr in dataTable.Rows)
{
   dr["mytimestamp"] = DateTime.FromFileTimeUTC(Convert.ToInt64(dr["theint64val"].ToString()));
}

И затем используя столбец "mytimestamp" в качестве значения оси x. Это прекрасно работает, и я могу показать метки оси x как значения даты и времени.

Но я бы не стал беспокоиться о создании столбца и, по существу, дублировании других данных столбца, но не видел никакого способа форматирования меток оси х. Возможно, я пропустил это. Я видел событие AxisViewChanged в документации и видел, как я могу установить заголовок диаграммы с этими данными, но не сами метки меток оси.

Любые идеи?

4b9b3361

Ответ 1

Я очень опаздываю, но надеюсь, что это может быть полезно для других людей...

Возможный способ сделать это - подписаться на chart.FormatNumber событие, например.

void chart1_FormatNumber(object sender, FormatNumberEventArgs e)
{
    if (e.ElementType == ChartElementType.AxisLabels &&
        e.ValueType == ChartValueType.Int64)
    {
        e.LocalizedValue = DateTime.FromFileTimeUtc((long)e.Value).ToShortDateString();
    }
}

Поскольку этот обработчик события вызывается во время преобразования нескольких элементов диаграммы, чтобы форматировать только желаемую ось, вы можете передать пользовательский формат меток оси:

this.chart1.ChartAreas[0].AxisX.LabelStyle.Format = "MyAxisXCustomFormat";

затем добавьте проверку в обработчик события:

void chart1_FormatNumber(object sender, FormatNumberEventArgs e)
{
    if (e.ElementType == ChartElementType.AxisLabels &&
        e.ValueType == ChartValueType.Int64 && 
        e.Format == "MyAxisXCustomFormat")
    {
        e.LocalizedValue = DateTime.FromFileTimeUtc((long)e.Value).ToShortDateString();
    }
}

Ответ 2

Вы пытались

 yourSeries.XValueType = ChartValueType.Time;