Как показать сообщение, если данные диаграммы пусты? - PullRequest
1 голос
/ 11 апреля 2019

У меня есть WinForm с диаграммой и базой данных. Диаграмма получения данных из базы данных.Если данных нет, диаграмма не видна.Я хотел бы показать сообщение в месте на диаграмме. Например: «Пока нет данных».Могу ли я это сделать?

if (chart1["Series1"].Points.Count == 0)
{
   ???
}

1 Ответ

5 голосов
/ 11 апреля 2019

.. показать сообщение на графике .. Могу ли я это сделать?

Конечно. На самом деле существует много способов, от установки Title диаграммы до использования Paint события и DrawString или создания TextAnnotation и т. Д.

Два последних варианта легко центрировать, и оба сохранят положение даже при изменении размера диаграммы.

Пример 1 - A TextAnnotation:

TextAnnotation ta = new TextAnnotation();

Настройте его так:

ta.Text = "No Data Yet";
ta.X = 45;  // % of the..
ta.Y = 45;  // chart size 
ta.Font = new Font("Consolas", 20f);
ta.Visible = false;  // first we hide it
chart1.Annotations.Add(ta);

Показывать всякий раз, когда данные изменяются:

ta.Visible = (chart1.Series[seriesNameOrIndex].Points.Count == 0)

Пример 2 - Рисование сообщения в событии Paint:

private void chart1_Paint(object sender, PaintEventArgs e)
{
    if (chart1.Series[seriesNameOrIndex].Points.Count == 0)
    {
        using (Font font = new Font("Consolas", 20f))
        using (StringFormat fmt = new StringFormat()
        { Alignment = StringAlignment.Center, LineAlignment = StringAlignment.Center })

            e.Graphics.DrawString("No data yet", 
                                  font, Brushes.Black, chart1.ClientRectangle, fmt);

    }
}

Это должно постоянно обновляться, так как добавление или удаление DataPoints вызовет событие Paint.

Кстати : рекомендуемый рекомендуемый способ проверки коллекции на наличие каких-либо данных - использование функции Linq Any():

(!chart1.Series[seriesNameOrIndex].Points.Any())

Он настолько быстр, насколько это возможно, и ясен в своих намерениях.

...