【问题标题】:not showing different charts on single form不在单一表格上显示不同的图表
【发布时间】:2011-09-09 18:13:24
【问题描述】:

您好,我正在尝试使用 mschart 控件在一个表单上表示两个图形(饼图和条形图)......数据来自数据库......

我正在使用单个图表(kpichart)控件来表示两个图形....

为此,我在代码下面写了

在这段代码中,我定义了两个不同的区域来定义两个图形.....

       public void KpiMembers_MouseClick(object sender, MouseEventArgs e)
       {

        Series statusseries;
        Series liveserries = null;
        string area;
        Title title;

        try
        {
            var pos = e.Location;
            var results = KpiMembersTotalchart.HitTest(pos.X, pos.Y, false, ChartElementType.DataPoint);
            foreach (var result in results)
            {
                if (result.ChartElementType == ChartElementType.DataPoint)
                {
                    if (result.Series.Points[result.PointIndex].AxisLabel == "Live")
                    {
                        DataTable Livemembers = null;
                        Livemembers = KpiData.livemembersmembershipstatus();

                        DataTable membersalltotals = null;
                        membersalltotals = kpimembtotals.membershipTotals(dtpStartDate.Value, dtpenddate.Value);

                        KpiMembersTotalchart.ChartAreas.Clear();
                        KpiMembersTotalchart.Titles.Clear();
                        KpiMembersTotalchart.Series.Clear();


                        area = "newchart";
                        KpiMembersTotalchart.ChartAreas.Add(area);
                        liveserries = KpiMembersTotalchart.Series.Add(area);
                        liveserries.ChartArea = area;

                        title = KpiMembersTotalchart.Titles.Add("Memberstotalspoints");
                        title.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold);
                        title.Alignment = ContentAlignment.TopLeft;
                        title.DockedToChartArea = area;


                        KpiMembersTotalchart.Titles.Add("").DockedToChartArea = area;

                        area = "subchart";
                        KpiMembersTotalchart.ChartAreas.Add(area);
                        statusseries = KpiMembersTotalchart.Series.Add(area);
                        statusseries.ChartArea = area;


                        title = KpiMembersTotalchart.Titles.Add("Live Status members by status");
                        title.Font = new Font(FontFamily.GenericSansSerif, 10, FontStyle.Bold);
                        title.Alignment = ContentAlignment.TopLeft;
                        title.DockedToChartArea = area;

                        KpiMembersTotalchart.Titles.Add("").DockedToChartArea = area;



                        foreach (Title chartTitle in KpiMembersTotalchart.Titles)
                        {
                            chartTitle.IsDockedInsideChartArea = false;
                        }

                        foreach (ChartArea chartArea in KpiMembersTotalchart.ChartAreas)
                        {
                            chartArea.Area3DStyle.Enable3D = true;
                            chartArea.AxisX.LabelStyle.IsEndLabelVisible = true;

                        }

                        if (area == "subchart")
                        {
                            foreach (Series charttypes in KpiMembersTotalchart.Series)
                            {
                                charttypes.ChartType = SeriesChartType.Pie;
                                charttypes["PielabelStyle"] = "Outside";
                                charttypes["DoughnutRadius"] = "30";
                                charttypes["PieDrawingStyle"] = "SoftEdge";
                                charttypes.BackGradientStyle = GradientStyle.DiagonalLeft;

                            }

                        }

                        if (area == "newchart")
                        {
                            foreach (Series chartareas in KpiMembersTotalchart.Series)
                            {
                                chartareas.ChartType = SeriesChartType.StackedColumn;
                                chartareas["ColumnDrawingStyle"] = "SoftEdge";
                                chartareas["LabelStyle"] = "Top";
                                chartareas.IsValueShownAsLabel = true;
                                chartareas.BackGradientStyle = GradientStyle.DiagonalLeft;
                            }
                        }


                        foreach (Legend legend in KpiMembersTotalchart.Legends)
                        {
                            legend.Enabled = false;
                        }

                        if (membersalltotals == null)
                        {
                            statusseries.Points.Clear();
                            statusseries.Points.AddXY("no status", 0);

                        }

                        if(Livemembers == null)
                        {

                            liveserries.Points.Clear();
                            liveserries.Points.AddXY("no membershipe", 0);

                        }
                        KpiMembersTotalchart.Series["newchart"].Points.DataBindXY(membersalltotals.Rows, "Status", membersalltotals.Rows, "Value");
                        KpiMembersTotalchart.Series["subchart"].Points.DataBindXY(Livemembers.Rows, "mshipname", Livemembers.Rows, "count");

                        if (area == "subchart")
                        {
                            foreach (Series charttypes in KpiMembersTotalchart.Series)
                            {
                                foreach (DataPoint point in charttypes.Points)
                                {
                                    switch (point.AxisLabel)
                                    {
                                        case "New": point.Color = Color.Cyan; break;
                                        case "Live": point.Color = Color.Green; break;
                                        case "Defaulter": point.Color = Color.Red; break;
                                        case "Cancelled": point.Color = Color.Orange; break;
                                        case "Completed": point.Color = Color.Blue; break;
                                        case "Frozen": point.Color = Color.Violet; break;
                                    }

                                    point.Label = string.Format("{0:0} - {1}", point.YValues[0], point.AxisLabel);
                                }
                            }
                        }
                        if (area == "newchart")
                        {
                            foreach (Series chartareas in KpiMembersTotalchart.Series)
                            {
                                foreach (DataPoint point in chartareas.Points)
                                {

                                    switch (point.AxisLabel)
                                    {
                                        case "Silver membership": point.Color = Color.Green; break;
                                        case "Gold Membership": point.Color = Color.Blue; break;
                                        //case "Refused": point.Color = Color.Red; break;
                                        case "Weekend Peak": point.Color = Color.Cyan; break;
                                        case "prspect": point.Color = Color.Indigo; break;

                                    }
                                    point.Label = string.Format("{0:0}", point.YValues[0]);
                                }

                            }
                        }
                    }

                }
            }
        }
        catch { }

    }

我的问题是我试图显示两个不同的图表(一个是饼图,另一个是堆积柱形图)....

但它显示了两个相同的图表(都是饼图),请参见下图

我想在第二个中显示堆积柱形图而不是饼图....但它显示了两个相同的图表(饼图)

我将整个表格分为两个区域.....

如何使用单个图表控件在同一表单上显示两个不同的图表

有没有人帮忙解决这个问题....

非常感谢您的任何想法.....

【问题讨论】:

  • 有没有人可以帮忙解决这个问题.....

标签: c# .net windows winforms


【解决方案1】:

这是代码中逻辑的一个简单问题。

您的代码当前为:

                    area = "newchart";
                    ......
                    area = "subchart";
                    ......
                    if (area == "subchart")
                    ......
                    if (area == "newchart")

这显然总是将第一个“if”评估为“true”,第二个“if”评估为“false”。你需要重新组织你的代码,使它不会像这样使用area——你需要退后一步,重写你的逻辑来创建你需要的图表。

【讨论】:

  • 在您调用area="subchart" 之后,您如何期望area 等于“newchart”?尝试使用更小的方法重构您的代码 - 这将帮助您查看和理解代码的流程。
  • 如果你想让这段代码工作,你必须理解它——阅读代码并理解它。如果你因为它太长而无法理解它,那么试着把它分解成每个少于 20 行的方法。每个方法都有一个有意义的名称——方法名称将帮助您理解它。祝你好运
  • 我如何编写逻辑,以便在一个表单上看到两个不同的图表......任何想法......是否可以使用单个区域来绘制两个图表...... .
  • 是的 - 这是可能的。您需要放慢速度并阅读您的代码。尝试使用调试器单步执行?
  • 如果你开始尝试将它分成两个函数:plotpiechart() 和 plotstackchart()
猜你喜欢
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
  • 2021-05-24
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2019-06-16
  • 2015-10-12
相关资源
最近更新 更多