DataTable to Graph - 使用 Points.AddXY 或 DataBind

DataTable to Graph - Using Points.AddXY or DataBind

我尝试了以下想法: and from

我不确定我是否遗漏了一些愚蠢的东西或者我的情况不同。

我有一个 DataTable 名为:DataTableUsedToPlotGraph。此 DataTable 包含多个列(例如,温度、时间、time_formatted、foder_name...)。

我想用这个 DataTable 的两列数据绘制图形(X - 时间列与 Y - 时间列)。

我试过的(它说我不仅需要 X 点,还需要 Y 点;如果我尝试输入 x 和 y 说:无法从 'System.Data.dataTable' 转换为 'System.Collections.IEnumerable'):

ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBind(DataTableUsedToPlotGraph,"time");

ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBindXY(DataTableUsedToPlotGraph,"time", "temp");

此外, (不在我的图表中绘制任何东西)

this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.AddXY(DataTableUsedToPlotGraphTemp.Columns["time"].ToString(), DataTableUsedToPlotGraphTemp.Columns["temp"].ToString());

然后,

DataView dv1 = new DataView(DataTableUsedToPlotGraph);
DataView dv2 = new DataView(DataTableUsedToPlotGraph);

dv1.RowFilter = "time";
dv2.RowFilter = "temp";

ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBind(dv1, "time", "temp, "");

对于数据库访问,我使用这个:

try
{
    conDatabase.Open();
    myReader = cmdDatabase.ExecuteReader();

    while (myReader.Read())
    {
        ChartTempVsTime.Series["TimeVsTempPoint"].MarkerSize = 2;
        this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.AddXY(myReader["time"].ToString(), myReader["temp"].ToString());
    }
} // end of try
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

但没有任何效果。有人知道我错过了什么吗?

在阅读并从@TaW 那里得到很多帮助后,我尝试了,但没有成功(图形显示但没有分数):

    try
    {
        this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBindXY(DataTableUsedToPlotGraph.Rows, "temp", DataTableUsedToPlotGraph.Rows, "time");
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

注意:如果我使用与 "SqlDataReader myReader;" 相同的列,它工作正常。

再尝试一次(显示图表但没有点):

    DataTableReader myReader;
    try
    {
        myReader = DataTableUsedToPlotGraph.CreateDataReader();

        while (myReader.Read())
        {
            //ChartTempVsTime.Series["TimeVsTempPoint"].MarkerSize = 2;
            this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.AddXY(myReader["time"].ToString(), myReader["temp"].ToString());

        }
    } // end of try
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

我加个DGV看看有没有数据:

    this.dataGridView1.DataSource = DataTableUsedToPlotGraph;
    this.ChartTempVsTime.Series["TimeVsTempPoint"].Points.DataBindXY(DataTableUsedToPlotGraph.Rows, "temp", DataTableUsedToPlotGraph.Rows, "time");

结果包含数据 + 带有时间和温度的列名。我会尝试在某个服务器上传图片。

图表数据绑定的方法有很多种。

请参阅 MSDN 了解各种选项及其各自的优缺点!

这是一个简单的例子:给定一个 DataTable dt 有两个 suitable 列 "c0""c1" 你可以简单地写:

yourChart.Series[yourSeriesIndexOrName].Points.DataBindXY(dt.Rows, "c0", dt.Rows, "c1");

请注意,如果您想在 x 值中包含日期,最好是 select 日期并确保 table 列也是 DateTime