如果图表数据为空,如何显示消息?
How to show a message if chart data is empty?
我有带图表的 WinForm,database.Chart 从数据库中获取数据。如果没有数据,则图表不可见。我想在图表中显示一条消息 place.For 示例:"No data yet." 我可以吗?
if (chart1["Series1"].Points.Count == 0)
{
???
}
..show a message in the chart..Can I do it?
当然可以。实际上有 许多 方法,从设置图表的 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())
它的速度尽可能快,意图也很明确。
我有带图表的 WinForm,database.Chart 从数据库中获取数据。如果没有数据,则图表不可见。我想在图表中显示一条消息 place.For 示例:"No data yet." 我可以吗?
if (chart1["Series1"].Points.Count == 0)
{
???
}
..show a message in the chart..Can I do it?
当然可以。实际上有 许多 方法,从设置图表的 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())
它的速度尽可能快,意图也很明确。