从单个csv文件中绘制多个y值

时间:2014-07-18 06:46:25

标签: c# csv charts mschart

我无法在单个图表上绘制多个Y值。以下代码仅适用于单个y值,但不会从同一csv数据文件中绘制多个y值。

csv文件的格式为: datestamp,value 1,value 2,value 3

我可以让图表显示csv文件中的日期戳与任何列y数据点,但不会显示其他y值。

是的,很明显我是OOP和winforms的新手,但我正在努力。在我编程的那天,它是PDP11上的Fortran。

无论如何,这段代码来自这里,但我找不到我要找的答案

表单是图表控件和按钮。

感谢您的帮助

7/27。
这段代码有效,但是有更好的方法可以加载多个Y值吗?

此外,代码已被修订版分解。

如果将它们加载到数据表中,则将数据表绑定到图表。这不会占用内存空间吗?

            private void button1_Click(object sender, EventArgs e)
    {
        // Full path to the data source file
        string file = "testlog2.csv";
        string path = @"g:\";
        // Create a connection string.
        string filepPathConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
            path + ";Extended Properties=\"Text;HDR=No;FMT=CSVDelimited\"";
        // Create Connection Object
        OleDbConnection myConnection = new OleDbConnection(filepPathConnectStr);

        // Create a database command on the connection using query
        string mySelectQuery = "Select * from " + file;
        OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);

        // Open the connection and create the reader
        myCommand.Connection.Open();
        OleDbDataReader myReader = myCommand.ExecuteReader();

        // Column 1 is a time value, column 2 is a double
        // databind the reader to the chart using the DataBindXY method
        Chart1.Series["Series1"].Points.DataBindXY(myReader, "0", myReader, "1");
        //Chart1.Series["Series2"].Points.DataBindY(myReader, "3");


        myReader.Close();

myConnection.Close();

    }

    private void checkBox1_CheckedChanged(object sender, EventArgs e)
    {
       // Full path to the data source file
        string file = "testlog2.csv";
        string path = @"g:\";
        // Create a connection string.
        string filepPathConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
            path + ";Extended Properties=\"Text;HDR=No;FMT=CSVDelimited\"";
        // Create Connection Object
        OleDbConnection myConnection = new OleDbConnection(filepPathConnectStr);

        // Create a database command on the connection using query
        string mySelectQuery = "Select * from " + file;
        OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);

        // Open the connection and create the reader
        myCommand.Connection.Open();
        OleDbDataReader myReader = myCommand.ExecuteReader();

        // Column 1 is a time value, column 2 is a double
        // databind the reader to the chart using the DataBindY method

        Chart1.Series["Series2"].Points.DataBindY(myReader, "3");

        myReader.Close();
        myConnection.Close();

    }
    }
}

1 个答案:

答案 0 :(得分:0)

您只是1 y列的数据绑定点。如果要显示多个y列,可以执行以下两项操作之一:

  1. 而不是数据绑定,手动添加点。这将需要循环遍历csv中的所有行,并为每行添加2个(或更多)点:

    series.Points.AddXY(csvLine[0], csvLine[3]);
    series.Points.AddXY(csvLine[0], csvLine[4]);
    
  2. 您可以更改不同列中的点的颜色以区分它们,但图例不会反映不同的颜色。

    1. 创建多个Series个对象,并将每个对象数据绑定到不同的y列。像

      这样的东西
      Series series2 = chart1.Series.Add("Series2");
      series2.Points.DataBindXY(myReader, "0", myReader, "4");
      
    2. 然后,您可以将series2的属性设置为具有不同的颜色等。这是首选方式,因为它可以为您处理很多内容。