C1FlexGrid 是一款功能丰富体积轻巧的表格控件。它借鉴了微软 Excel 的操作风格,丰富的数据操作功能、快捷键、选择模式剪切板支持等。并且具有灵活的外观设置和高效的性能。
本篇文章阐述如何添加 Chart 到C1FlexGrid-Excel 的另一个强大功能。在本文中,我们将添加 C1Chart 控件,怎样设置 C1Chart 的位置。
添加 Chart 到图表中 如 Excel 中,当用户选择数据,添加图表到表单中,Chart 将直观的显示数据的走势。在 C1FlexGrid 中,我们可以通过以下代码实现:
private void addChartToolStripMenuItem_Click(object sender, EventArgs e) { if (c1FlexGrid1.Clip != "") { data = c1FlexGrid1.Clip; // capture the selected data in the grid string[] values = data.Split('\r'); if (ischart == true) // if the chart already exists in the grid then clear the series collection { chart.ChartGroups[0].ChartData.SeriesList.Clear(); C1.Win.C1Chart.ChartDataSeries cds; // Add new data for (int i = 0; i < values.Length; i++) { if (values[ i ] != "") { cds = new C1.Win.C1Chart.ChartDataSeries(); cds = chart.ChartGroups[0].ChartData.SeriesList.AddNewSeries(); cds.PointData.Length = 1; cds.Label = "Series " + values[ i ].ToString(); cds.Y[0] = Convert.ToInt16(values[ i ]); } } } else // if it doesn't, then add a new chart { chart = new C1.Win.C1Chart.C1Chart(); c1FlexGrid1.Controls.Add(chart); chart.Location = new Point(200, 100); chart.Size = new Size(300,300); chart.Legend.Visible = true; chart.Header.Visible = true; chart.Header.Text = "ADDED CHART CONTROL"; chart.MouseDown += new MouseEventHandler(chart_MouseDown); chart.MouseCaptureChanged += new EventHandler(chart_MouseCaptureChanged); chart.ChartGroups[0].ChartType = C1.Win.C1Chart.Chart2DTypeEnum.Pie; chart.ChartGroups[0].ChartData.SeriesList.Clear(); C1.Win.C1Chart.ChartDataSeries cds; for (int i = 0; i < values.Length; i++) // Add Data { if (values[ i ] != "") { cds = new C1.Win.C1Chart.ChartDataSeries(); cds = chart.ChartGroups[0].ChartData.SeriesList.AddNewSeries(); cds.PointData.Length = 1; cds.Label = "Series " + values[ i ].ToString(); cds.Y[0] = Convert.ToInt16(values[ i ]); } } } ischart = true; // now the chart is there on the grid } }
设置 Chart 的位置:
添加 Chart 后,Chart覆盖于 C1FlexGrid 上,可以通过以下代码设置 Chart 位置。
void chart_MouseDown(object sender, MouseEventArgs e) { chartPoint = e.Location; // Capture the Chart Control for moving } void chart_MouseCaptureChanged(object sender, EventArgs e) { Point tmpPoint = c1FlexGrid1.HitTest().Point; // drop it in the user specified place in the grid chart.Location = new Point(tmpPoint.X - chartPoint.X, tmpPoint.Y - chartPoint.Y); }
效果图:
下载示例:Download CS Sample