如果图表数据为空,如何显示消息?

时间:2019-04-10 21:35:04

标签: c# winforms mschart

我有带有图表和数据库的WinForm。图表从数据库中获取数据。如果没有数据,则图表不可见。我想在图表位置显示一条消息,例如:“尚无数据”。我可以吗?

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

1 个答案:

答案 0 :(得分:5)

  

..在图表中显示一条消息。.我可以吗?

好的。从设置图表的Title到使用Paint事件和DrawString或创建TextAnnotation等实际上,有很多种方式。 / p>

后两个选项很容易居中,即使调整图表大小,两个选项都可以保持位置。

示例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())

既要尽可能快又要明确意图。