在winforms中使用mschart的问题
本文关键字:mschart 问题 winforms | 更新日期: 2023-09-27 18:08:19
在同一张表格上画两个不同的图表是一个大问题…
我有一个表单,在这个表单中,我已经表示了饼状图的数据来自数据库,工作良好.....
和我已经管理,当我点击饼图上的特定部分,我想显示两个不同的图形..点击事件,我已经管理,但我不能显示两个不同的图表....
这是我下面的代码…
public void mschart1_MouseClick(object sender, MouseEventArgs e)
{
// here i am checking the condition to hit the exact location in chart
Series serries;
Series series2 = null;
DataTable new1 = null;
new1 = mData.accountstatus();
DataTable new2 = null;
new2 = mdata2.Totals(dtpStartDate.Value, dtpenddate.Value);
mschart1.ChartAreas.Clear();
mschart1.Titles.Clear();
mschart1.Series.Clear();
area = "area1";
mschart1.ChartAreas.Add(area);
serries = mschart1.Series.Add(area);
serries.ChartArea = area;
title = mschart1.Titles.Add("title1");
title.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold);
title.Alignment = ContentAlignment.TopLeft;
title.DockedToChartArea = area;
mschart1.Titles.Add("").DockedToChartArea = area;
area = "area2";
mschart1.ChartAreas.Add(area);
series2 = mschart1.Series.Add(area);
series2.ChartArea = area;
title = mschart1.Titles.Add("title2");
title.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold);
title.Alignment = ContentAlignment.TopLeft;
title.DockedToChartArea = area;
mschart1.Titles.Add("").DockedToChartArea = area;
foreach (Title chartTitle in mschart1.Titles)
{
chartTitle.IsDockedInsideChartArea = false;
}
foreach (ChartArea chartArea in mschart1.ChartAreas)
{
chartArea.Area3DStyle.Enable3D = true;
chartArea.AxisX.LabelStyle.IsEndLabelVisible = true;
}
if (area == "area2")
{
foreach (Series charttypes in mschart1.Series)
{
charttypes.ChartType = SeriesChartType.Pie;
charttypes["PielabelStyle"] = "Outside";
charttypes["DoughnutRadius"] = "30";
charttypes["PieDrawingStyle"] = "SoftEdge";
charttypes.BackGradientStyle = GradientStyle.DiagonalLeft;
}
}
if (area == "area1")
{
foreach (Series chartareas in mschart1.Series)
{
chartareas.ChartType = SeriesChartType.StackedColumn;
chartareas["ColumnDrawingStyle"] = "SoftEdge";
chartareas["LabelStyle"] = "Top";
chartareas.IsValueShownAsLabel = true;
chartareas.BackGradientStyle = GradientStyle.DiagonalLeft;
}
}
foreach (Legend legend in mschart1.Legends)
{
legend.Enabled = false;
}
if (new2 == null)
{
series2.Points.Clear();
series2.Points.AddXY("no data", 0);
}
if(new1 == null)
{
serries.Points.Clear();
serries.Points.AddXY("no data", 0);
}
mschart1.Series["area1"].Points.DataBindXY(new2.Rows, "data1", new2.Rows, "Value");
mschart1.Series["area2"].Points.DataBindXY(new1.Rows, "name", new2.Rows, "count");
if (area == "area1")
{
foreach (Series charttypes in mschart1.Series)
{
foreach (DataPoint point in charttypes.Points)
{
switch (point.AxisLabel)
{
case "case1": point.Color = Color.Cyan; break;
case "case2": point.Color = Color.Green; break;
}
point.Label = string.Format("{0:0} - {1}", point.YValues[0], point.AxisLabel);
}
}
}
if (area == "area2")
{
foreach (Series chartareas in mschart1.Series)
{
foreach (DataPoint point in chartareas.Points)
{
switch (point.AxisLabel)
{
case "case23": point.Color = Color.Green; break;
case "case 24": point.Color = Color.Blue; break;
}
point.Label = string.Format("{0:0}", point.YValues[0]);
}
}
}
}
我的问题是,当我点击图表的特定区域,它会显示两个图表,但都是相同的图表。(我想要两种不同类型的图表,正如我在下面的代码中提到的)
有谁能帮帮我......
多谢…
我猜问题出在这两段代码上,就像这样:
if (area == "area2")
{
foreach (Series charttypes in mschart1.Series)
{
charttypes.ChartType = SeriesChartType.Pie;
...
}
}
if (area == "area1")
{
foreach (Series charttypes in mschart1.Series)
{
charttypes.ChartType = SeriesChartType.StackedColumn;
...
}
}
由于area
变量最后被设置为"area2"
,因此只有第一个if
条件将被满足,因此图表类型将始终为Pie类型。
我认为你应该把你的代码改成:
foreach (Series charttypes in mschart1.Series)
{
if(charttypes.ChartArea == "area2")
{
charttypes.ChartType = SeriesChartType.Pie;
...
}
else if(charttypes.ChartArea == "area1")
{
charttypes.ChartType = SeriesChartType.StackedColumn;
...
}
}