【问题标题】:Not getting BarChart in Winform Application在 Winform 应用程序中没有得到 BarChart
【发布时间】:2014-09-10 09:43:08
【问题描述】:

我正在尝试在 winform 应用程序中显示来自数据库的动态条形图,但它没有出现并在var p2 = series.Points[arrlocationSTD]; 时给我Argument out of Exception 错误arrlocationSTD=1。这是我在 c# 中的代码..

    void LoadBarChart(string qurystring)
    {


            if (calltype.Equals("TRANSFERED"))
            {

                totalTransfered = dr["SummaryOfCalls"].ToString();
                intTRANSFERED = int.Parse(totalTransfered, CultureInfo.InvariantCulture);

               if (i == 0)
                {
                arrlocationTransferred = i;

                series.Points.Add(intTRANSFERED);
                var p7 = series.Points[arrlocationTransferred];
                p7.Color = Color.Yellow;
                p7.AxisLabel = "TRANSFERED";
                p7.LegendText = "TRANSFERED";
                p7.Label = totalTransfered;

                i++;
                }
                else
                {
                arrlocationTransferred = i;

                series.Points.Add(intTRANSFERED);
                var p7 = series.Points[arrlocationTransferred];
                p7.Color = Color.Yellow;
                p7.AxisLabel = "TRANSFERED";
                p7.LegendText = "TRANSFERED";
                p7.Label = totalTransfered;

                }

            }

        }

        barChart.Invalidate();

        pnlBar.Controls.Add(barChart);
    }

请帮我解决这个问题。 提前谢谢..

【问题讨论】:

  • 听起来series.Points 集合包含一个或零个元素。在该行设置断点并使用手表查看该集合的内容。
  • 您只在系列中添加了一个点。它的索引是 0,而不是 1。
  • @HansPassant 如果我有多个点,我是否总是需要以 0、1、2 等顺序添加或随机添加。
  • 如果 Points 是一个列表或数组,它将使用从零开始的索引进行排序。您可以将其更改为 Dictionary 集合,然后它将使用您提供的“索引”作为键。例如。 private Dictionary<int,int> Points; 然后series.Points.Add(arrlocationsSTD,intSTD);
  • @MikeofSST 我已经用 Barchart 的完整代码更新了我的帖子。请看一下,因为我完全没有办法解决这个问题..

标签: c# winforms bar-chart


【解决方案1】:

您需要添加额外的处理,但以下可能会有所帮助。

我强烈建议您在开始更改颜色属性等之前获取正确显示数据的图表。

void LoadBarChart(string qurystring)
{
    String conn = Strings.ConnectionString; // You fill this in.

    Dictionary<String,int> callSummariesByTypeOfCall =
        new Dictionary<String,int>();

    MySqlConnection con = new MySqlConnection(conn);
    MySqlCommand comm = new MySqlCommand(qurystring, con);
    con.Open();
    MySqlDataReader dr = comm.ExecuteReader();

    // Get the data into a dictionary
    while (dr.Read())
    {
        String calltype = dr["TypeOfCall"].ToString();
        int summary = int.Parse(dr["Calls"].ToString(), CultureInfo.InvariantCulture);
        callSummariesByTypeOfCall[calltype] = summary;
    }

    // Do any other processing you need here

    // Bind the data onto the Series
    Series series = new Series
    {
        Name = "series2",
        IsVisibleInLegend = false,
        ChartType = SeriesChartType.Column
    };
    series.Points.DataBindXY(
        callSummariesByTypeOfCall.Keys,
        callSummariesByTypeOfCall.Values);
    barChart.Series.Add(series);
    barChart.Invalidate();

    pnlBar.Controls.Add(barChart);
}

【讨论】:

  • barChart.Series.DataBindXY 错误 DataBindXY 不存在
  • 对不起。错过了.Points。更新了答案。
  • 你在帮我吗?
猜你喜欢
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2014-09-24
相关资源
最近更新 更多