Форматирование оси управления 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 в документации и видел, как я могу установить заголовок диаграммы с этими данными, но не сами метки меток оси.
Любые идеи?
Ответы
Ответ 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;