C#数据表数据到图表

本文关键字:数据 数据表 | 更新日期: 2023-09-27 18:20:23

我有一个文本文件作为数据源,并用其中的所有数据创建了一个数据表。现在我需要从中获取数据来创建一个图表。

完整的数据表看起来像这个

datestamp   |    name_X_1      |    name_X_2      |    name_Y_1      |    name_Y_2
-----------------------------------------------------------------------------------
1/1/199     |    somevalue     |    somevalue     |    somevalue     |    somevalue
1/2/199     |    somevalue     |    somevalue     |    somevalue     |    somevalue

现在,我需要从某个时间(这将是日历控件中的一个变量)获得name_X_*列中的所有name_X_*值。

这就是我需要图表的数据的方式

datastamp   |    name_x_data        |    name_y_data
-------------------------------------------------------
1/1/199     |    name_X_1_value     |    name_y_1_value  
1/1/199     |    name_X_2_value     |    name_y_2_value  

更困难的是,name_X_*和name_y_*列可以变化(X和y是测量的X和y轴值,并且总是相同数量的列)。在一个文本文件中,它是10列,而在另一个文本中,它可能是20列。所以我不能硬编码列名。我需要在name_X_和name_Y_上对它们进行筛选,并在特定日期进行搜索。

我还可以存储列的数量。因此,如果我们可以为X选择第2到10列,为Y选择第10到20列,那就太棒了。在数据库中对文本文件进行管理是可以的,我在这里输入文本文件的列数。所以,如果有人可以选择使用计数,这对我也适用。

如果有人能为我指明正确的方向,我将不胜感激

这是我迄今为止制作的代码:

DataTable dt = new DataTable();
string[] columns = null;
string FileName = "C:''datapath''data.dat";
var lines = File.ReadAllLines(FileName);
// create columns from text file and skip first few rows
if (lines.Count() > 2)
    {
        columns = lines[1].Split(new char[] { ',' }).Select(x => x.Replace("'"", "")).ToArray();
        foreach (var column in columns)
            dt.Columns.Add(column);
    }
// add data to rows
for (int i = 2; i < lines.Count(); i++)
    {
        DataRow dr = dt.NewRow();
        string[] values = lines[i].Split(new char[] { ',' }).Select(x => x.Replace("'"", "")).ToArray();
        for (int j = 0; j < values.Count() && j < columns.Count(); j++)
            dr[j] = values[j];
        dt.Rows.Add(dr);
    }
// Columns filter (under construction) (this is the part i need to be not hard coded)
string[] selectedColumns = new[] { "TIMESTAMP", "sensor_X_001", "sensor_X_002" };
DataTable dt2 = new DataView(dt).ToTable(false, selectedColumns);
    
// Date filter (under construction)
// string s = "2014-05-21 13:05:00";
// DataRow foundRow = dt2.Tables["TIMESTAMP"].Rows.Find(s);
// data to grid 
this.GridView1.DataSource = dt2;
this.GridView1.DataBind();

C#数据表数据到图表

找到了一个解决方案,并认为我应该分享它:)

DataTable result = new DataTable();
result.Columns.Add("datestamp", typeof(String));
result.Columns.Add("name_x_data", typeof(String));
result.Columns.Add("name_y_data", typeof(String));
DataRow drresult;
foreach (DataRow datarow in dt.Rows)
{
    for (int i = 1; i <= dt.Columns.Count / 2; i++)
    {
        drresult = result.NewRow();
        drresult["datestamp"] = datarow["datestamp"];
        drresult["name_x_data"] = datarow["name_X_" + i];
        drresult["name_y_data"] = datarow["name_Y_" + i];
        result.Rows.Add(drresult);
    }
}