如何创建亲子报表
本文关键字:报表 创建 何创建 | 更新日期: 2023-09-27 18:14:10
我尝试创建简单的winform报告(s)基于表从我的数据库。因为有许多聚合,我想创建一个父图表和可选的子图表。下面是绘制"parent"报告的核心
private bool DrawReport(DataTable dt)
{
string serieName;
foreach (object itemChecked in checkedListBox1.CheckedItems)
{
serieName = itemChecked.ToString();
chart1.Series.Add(serieName);
chart1.Series[serieName].ChartType = SeriesChartType.Column;
//chart1.Series[0].IsValueShownAsLabel = true;
}
chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 90;
chart1.ChartAreas[0].AxisX.Interval = 1;
chart1.ChartAreas[0].AxisY.MajorGrid.LineWidth = 0;
chart1.ChartAreas[0].AxisX.MajorGrid.LineWidth = 0;
foreach (DataRow dr in dt.Rows)
{
string X = dr["DATE"].ToString() + " " + dr["HOUR"].ToString();
string Y = dr["MED"].ToString();
try
{
chart1.Series[SER].Points.AddXY(X, Y);
}
catch (Exception)
{
throw;
}
}
chart1.DataBind();
chart1.Visible = true;
return true;
}
直到现在一切都很好。
如您所见,X轴标签包含时间段-实际上是4或6小时的时间段。重点是创建另一个图表"child one"。它会出现当我点击元素的serie。所以现在的问题是如何读取点击x轴元素的值(这实际上是日期字符串)到变量。我可以在工具提示
上显示这个值chart1.Series[0].ToolTip = "#VALX"
,但我找不到方法来分配它的变量。
我建议你从MSDN下载图表示例,因为它对这些图表有很大的帮助。对于特定的问题,您可以使用Chart.HitTest
来确定鼠标被点击(或移动)了哪个图表元素。类似于(我将此用于MouseMove
,但您可以轻松地将其用于MouseClick
或其他事件):
private void ChartMouseMove(object sender, MouseEventArgs e)
{
try
{
HitTestResult[] htrList = Chart.HitTest(e.X, e.Y, false, ChartElementType.DataPoint);
// loop through all of the elements in htrList, and make the "child" chart
}
catch (Exception)
{
StatusLabelText = "";
}
}
如果单击的图表元素是DataPoint
,那么您可以根据需要获得x和/或y值。您可能需要考虑的一件事是:您可能希望使用DateTime
对象作为DataPoint
的x值,而不是自己构造一个日期表示(string X = dr["DATE"].ToString() + " " + dr["HOUR"].ToString();
),并将其格式化为适合显示的图表(chart. axisx)。Format = "mmddyy hh"(伪代码)。这将使在创建子图表时更容易匹配点。
另一点:根据所提供的代码,最后一行(chart.DataBind();
)是不需要的。您从未为图表指定DataSource
,而是手动添加DataPoints
,因此不需要数据绑定。